public static <T extends DC> Set<Pair<Pair<T,PT<Integer>>,Pair<T,PT<Integer>>>> getAllPairs(Set<Pair<T,PT<Integer>>> baseSetA,Set<Pair<T,PT<Integer>>> baseSetB)
  { Set<Pair<Pair<T,PT<Integer>>,Pair<T,PT<Integer>>>> res;
    if(baseSetA==null||baseSetB==null)
    { return null;
    }
    else//baseSetA!=null&&baseSetB!=null
    { if(baseSetA.getNext()==null && baseSetB.getNext()==null)
      { res=new Set(new Pair(baseSetA.getFst(),baseSetB.getFst()),null);
      }  
      else if(baseSetA.getNext()!=null && baseSetB.getNext()==null)
      { res=new Set(new Pair(baseSetA.getFst(),baseSetB.getFst()),getAllPairs(baseSetA.getNext(), baseSetB));
      }
      else if(baseSetA.getNext()==null && baseSetB.getNext()!=null)
      { res=new Set(new Pair(baseSetA.getFst(),baseSetB.getFst()),getAllPairs(baseSetA,baseSetB.getNext()));
      }
      else
      { res=getAllPairs(new Set(baseSetA.getFst(),null),baseSetB).concat(getAllPairs(baseSetA.getNext(),baseSetB));
      }    
      return res;
    } 
  }