import java.util.*;

public class ListChain<E> implements Collection<E> {

    ChainLink<E> firstElement;
    ChainLink<E> lastElement;

    @Override
    public boolean add(E e) {
        if (firstElement == null) {
            firstElement = new ChainLink<E>(e);
            lastElement = firstElement;
        } else {
            ChainLink<E> newElement = new ChainLink<E>(e);
            lastElement.setNext(newElement);
            lastElement = newElement;
        }
        
        return true;
    }

    @Override
    public boolean addAll(Collection<? extends E> c) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void clear() {
        firstElement = null;
        lastElement = null;
    }

    @Override
    public boolean contains(Object o) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean containsAll(Collection<?> c) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean isEmpty() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public Iterator<E> iterator() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public boolean remove(Object o) {
        return false;
    }

    public boolean remove(int n) {
        ChainLink<E> prev = firstElement;
        for (int i = 0; i < n-1; i++) {
            if (prev.getNext() != null) {
                prev = prev.getNext();
            } else {
                return false;
            }
        }

        ChainLink<E> toRemove = prev.getNext();
        if (toRemove.getNext() == null) return false;
        prev.setNext(toRemove.getNext());
        toRemove = null;
        
        return true;
    }

    public E get(int n) {
        ChainLink<E> e = firstElement;
        for (int i = 0; i < n; i++) {
            if (e.getNext() != null) {
                e = e.getNext();
            }
        }

        return e.getValue();
    }

    @Override
    public boolean removeAll(Collection<?> c) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean retainAll(Collection<?> c) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public Object[] toArray() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public <T> T[] toArray(T[] a) {
        // TODO Auto-generated method stub
        return null;
    }

    
}
