Проверку вроде бы проходит. Никак не могу въехать в эту тему. Помогите, пожалуйста!
public class Solution {
    private final String first, last;

    public Solution(String first, String last) {
        this.first = first;
        this.last = last;
    }

    @Override
    public boolean equals(Object n) {
        if (n == this) {
            return true;
        }

        if (!(n instanceof Solution)) {
            return false;
        }

        Solution sol = (Solution) n;


       boolean naNull =  (first == null && sol.first == null && last.equals(sol.last)) || (first.equals(sol.first) && last == null && sol.last == null);


       boolean neNull = first != null && first.equals(sol.first) && last != null && last.equals(sol.last);

       return naNull || neNull;

    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((first == null) ? 0 : first.hashCode()) +
                ((last == null) ? 0 : last.hashCode());
        return result;
    }

    public static void main(String[] args) {
        Set<Solution> s = new HashSet<>();
        s.add(new Solution("Donald", "Duck"));
        s.add(new Solution("Donald", "Duck"));
        System.out.println(s.contains(new Solution("Donald", "Duck")));
        s.add(new Solution(null, "Duck"));
        System.out.println(s.contains(new Solution(null, "Duck")));
        s.add(new Solution("Donald", null));
        System.out.println(s.contains(new Solution("Donald", null)));

        System.out.println(s.size());

    }
}