public ArrayList<ArrayList<Cell>> nakedOverlap(Cell[] toc){
        ArrayList<Cell> toCompare = new ArrayList<Cell>();
        ArrayList<ArrayList<Cell>> ret = new ArrayList<ArrayList<Cell>>();
        toCompare.addAll(Arrays.asList(toc));
        
        //remove unneccessary comparisons;
        Iterator<Cell> q = toCompare.iterator();
        while(q.hasNext()){
            Cell c = q.next();
            if(c.getCandidates().size()==1 || c.getCandidates().size()> size)
                q.remove();
        }
        if(toCompare.size() < size) return ret;
        
        ArrayList<ArrayList<Cell>> possibilities = findCombinations(toCompare);
        for(ArrayList<Cell> poss : possibilities){
            HashSet<Integer> x = new HashSet<Integer>();
            for(Cell s: poss){
                x.addAll(s.getCandidates());
            }
            if(x.size()==size){
                //woohoo we have a naked subset!
                ret.add(poss);
            }
        }
        return ret;
    }