import java.util.NoSuchElementException;

class LockList<E> extends BasicLinkedList<E> {
	
	public void addFirst(E item) {
		head = new LockListNode<E>(item, head);
		num_nodes++;
	}
	
	public E removeFirst() throws NoSuchElementException {
		if (head == null)
			throw new NoSuchElementException("... empty list");
		if (((LockListNode<E>)head).isLocked())
			return null;
		E removedItem = head.getElement();
		head = head.getNext();
		num_nodes--;
		return removedItem;
	}
	
	public void lockNode(ListNode<E> node) {
		if (node instanceof LockListNode)
			((LockListNode<E>)node).lock(); 
	}
	
	private void lockSecondNode() { // just for testing purposes
		((LockListNode)head.getNext()).lock();
	}
	public static void main(String[] args) {
		LockList<Integer> list = new LockList<Integer>();
		list.addFirst(3); list.addFirst(2); list.addFirst(1);
		System.out.println(list.getFirst());
		System.out.println(list.size());
		list.lockSecondNode();
		System.out.println(list.removeFirst());
		System.out.println(list.size());
		System.out.println(list.removeFirst());
		System.out.println(list.size());
	}
}

