@Override
    public Integer solve() {

        final List<Integer> cubes = new ArrayList<Integer>();
        
        int sum = 0;
        
        for (int d1 = 1; d1 < 0x020; d1 <<= 1) {
            for (int d2 = d1 << 1; d2 < 0x040; d2 <<= 1) {
                for (int d3 = d2 << 1; d3 < 0x080; d3 <<= 1) {
                    for (int d4 = d3 << 1; d4 < 0x100; d4 <<= 1) {
                        for (int d5 = d4 << 1; d5 < 0x200; d5 <<= 1) {
                            for (int d6 = d5 << 1; d6 < 0x400; d6 <<= 1) {
                                
                                final int first = d1 | d2 | d3 | d4 | d5 | d6;
                                
                                if (valid(first)) {
                                    for (int second : cubes) {
                                        if (valid(first, second)) ++sum;
                                    }
                                    cubes.add(first);
                                }
                            }
                        }
                    }
                }
            }
        }

        return sum;
    }