@Override
 public Alignment rematch(Alignment a) {
   Alignment maps = new Alignment();
   for (Mapping m : a) {
     int sId = m.getSourceId();
     int tId = m.getTargetId();
     maps.add(sId, tId, mapTwoTerms(sId, tId));
   }
   return maps;
 }
 @Override
 public Alignment extendAlignment(Alignment a, double thresh) {
   input = a;
   Alignment maps = new Alignment();
   for (int i = 0; i < input.size(); i++) {
     Mapping m = input.get(i);
     Set<Integer> sourceSuperClasses = rels.getSuperClasses(m.getSourceId(), true);
     Set<Integer> targetSuperClasses = rels.getSuperClasses(m.getTargetId(), true);
     for (Integer s : sourceSuperClasses) {
       if (input.containsSource(s) || maps.containsSource(s)) continue;
       for (Integer t : targetSuperClasses) {
         if (input.containsTarget(t) || maps.containsTarget(t)) continue;
         double sim = mapTwoTerms(s, t);
         if (sim >= thresh) maps.add(s, t, sim);
       }
     }
   }
   return maps;
 }