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; }