import org.checkerframework.checker.nullness.qual.*;
import org.checkerframework.dataflow.qual.Pure;

class Node {
    int id;
    @Nullable Node next;

    Node(int id, @Nullable Node next) {
        this.id = id;
        this.next = next;
    }
}

class SubEnumerate {
    protected @Nullable Node current;

    public SubEnumerate(Node node) {
        this.current = node;
    }

    @EnsuresNonNullIf(expression = "current", result = true)
    public boolean hasMoreElements() {
        return (current != null);
    }
}

class Enumerate extends SubEnumerate {

    public Enumerate(Node node) {
        super(node);
    }

    public boolean hasMoreElements() {
        return (current != null);
    }
}

class Main {
    public static final void main(String args[]) {
        Node n2 = new Node(2, null);
        Node n1 = new Node(1, n2);
        Enumerate e = new Enumerate(n1);
        while (e.hasMoreElements()) {}
    }
}
