



package foo.bar.baz;




import java.util.List;
import java.util.Vector;




import org.eclipse.jdt.core.dom.ASTParser;




import java.net.Socket;


public class Another {
}




public class Example {




	public class Nested {
	}




	public static class Pair {




		public String first;




		public String second;
// Between here...




// ...and here are 10 blank lines
	};




	private LinkedList fList;




	public int counter;




	public Example(LinkedList list) {




		fList = list;
		counter = 0;
	}




	public void push(Pair p) {




		fList.add(p);
		++counter;
	}




	public Object pop() {




		--counter;
		return (Pair) fList.getLast();
	}
}
