



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