private GraphPart getNextSuperPartPath(
     GraphPart original, GraphPath path, List<GraphPart> visited) {
   if (visited.contains(this)) {
     return null;
   }
   visited.add(this);
   for (GraphPart p : nextParts) {
     if (p == original) {
       continue;
     }
     if (p.path.length() < path.length()) {
       return p;
     } else {
       GraphPart gp = p.getNextSuperPartPath(original, path, visited);
       if (gp != null) {
         return gp;
       }
     }
   }
   return null;
 }