import java.util.List;
import java.util.Objects;
import java.util.TreeSet;
 
class Scratch {
    public static void main
(String[] args
) {         Foo fooOne = Foo.of(1);
        Foo fooTwo = Foo.of(2);
        Foo fooThree = Foo.of(3);
        TreeSet<Foo> set = new TreeSet<>();
        set.
addAll(List.
of(fooOne, fooTwo, fooThree
));        System.
out.
println(set.
size());         fooOne.setValue(4);
        set.add(fooOne);
        System.
out.
println(set.
size());     }
}
 
class Foo implements Comparable<Foo> {
    private int value;
 
    private Foo(int value) {
        this.setValue(value);
    }
 
    public static Foo of(int value) {
        return new Foo(value);
    }
 
    public int getValue() {
        return value;
    }
 
    public Foo setValue(int value) {
        this.value = value;
        return this;
    }
 
    @Override
    public boolean equals
(Object o
) {         if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Foo foo = (Foo) o;
        return getValue() == foo.getValue();
    }
 
    @Override
    public int hashCode() {
        return Objects.hash(value);
    }
 
    @Override
    public int compareTo(Foo that) {
        return getValue() - that.getValue();
    }
}
				aW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CmltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKCmNsYXNzIFNjcmF0Y2ggewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIEZvbyBmb29PbmUgPSBGb28ub2YoMSk7CiAgICAgICAgRm9vIGZvb1R3byA9IEZvby5vZigyKTsKICAgICAgICBGb28gZm9vVGhyZWUgPSBGb28ub2YoMyk7CiAgICAgICAgVHJlZVNldDxGb28+IHNldCA9IG5ldyBUcmVlU2V0PD4oKTsKICAgICAgICBzZXQuYWRkQWxsKExpc3Qub2YoZm9vT25lLCBmb29Ud28sIGZvb1RocmVlKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNldC5zaXplKCkpOwogICAgICAgIGZvb09uZS5zZXRWYWx1ZSg0KTsKICAgICAgICBzZXQuYWRkKGZvb09uZSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNldC5zaXplKCkpOwogICAgfQp9CgpjbGFzcyBGb28gaW1wbGVtZW50cyBDb21wYXJhYmxlPEZvbz4gewogICAgcHJpdmF0ZSBpbnQgdmFsdWU7CgogICAgcHJpdmF0ZSBGb28oaW50IHZhbHVlKSB7CiAgICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBGb28gb2YoaW50IHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBGb28odmFsdWUpOwogICAgfQoKICAgIHB1YmxpYyBpbnQgZ2V0VmFsdWUoKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBGb28gc2V0VmFsdWUoaW50IHZhbHVlKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogICAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7CiAgICAgICAgaWYgKHRoaXMgPT0gbykgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKG8gPT0gbnVsbCB8fCBnZXRDbGFzcygpICE9IG8uZ2V0Q2xhc3MoKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIEZvbyBmb28gPSAoRm9vKSBvOwogICAgICAgIHJldHVybiBnZXRWYWx1ZSgpID09IGZvby5nZXRWYWx1ZSgpOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICByZXR1cm4gT2JqZWN0cy5oYXNoKHZhbHVlKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKEZvbyB0aGF0KSB7CiAgICAgICAgcmV0dXJuIGdldFZhbHVlKCkgLSB0aGF0LmdldFZhbHVlKCk7CiAgICB9Cn0=