



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