public void Find(int k, HashSet<Integer> qp, HashSet<Integer> qm){
        HashSet<Integer> gg = new HashSet();
        int delt;
        if (qp.isEmpty() && qm.isEmpty()){
            HashSet<Integer> tmp = new HashSet();
            for (int i = 0; i < k;i++)
                tmp.add(ss[i]);
            sets.add(tmp);
            return;
        }
        int i=0;
        if (!qm.isEmpty()){
            delt = size;
            for (int j = 0;j < size; j++){
                if (qm.contains(j)){
                    HashSet<Integer> tmp = new HashSet();
                    tmp.addAll(a.get(j));
                    tmp.retainAll(qp);
                    if (tmp.size()<delt){
                        i = j;
                        delt = tmp.size();
                    }
                    HashSet<Integer> tmp2 = new HashSet();
                    tmp2.addAll(a.get(i));
                    gg.retainAll(qp);
                }
                    
            }
        }else
            gg.addAll(qp);
        i=0;
        while (i<size){
            if (gg.contains(i)){
                ss[k] = i;
                HashSet<Integer> s1 = new HashSet();
                HashSet<Integer> s2 = new HashSet();
                s1.addAll(qp);
                s2.addAll(qm);
                s1.removeAll(a.get(i));
                s1.remove(i);
                s2.removeAll(a.get(i));
                s2.remove(i);
                Find(k+1,s1,s2);
                qp.remove(i);
                qm.add(i);
                gg = new HashSet();
                gg.addAll(qp);
                gg.retainAll(a.get(i));
            }
            i++;
        }
    }