



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();
	}
}
