class Pair<A, B> {

    public final A a;

    public final B b;

    public Pair(A a, B b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public boolean equals(Object o) {<FILL_FUNCTION_BODY>}

    @Override
    public int hashCode() {
        int result = a != null ? a.hashCode() : 0;
        return 31 * result + (b != null ? b.hashCode() : 0);
    }

    @Override
    public String toString() {
        return f("<%s, %s>", a, b);
    }
}

        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;
        Pair<?, ?> pair = (Pair<?, ?>) o;
        if (!Objects.equals(a, pair.a))
            return false;
        if (!Objects.equals(b, pair.b))
            return false;
        return true;
    
<no_super_class>