code: @Override
      public SimplePath[] interconnect(KamNode[] sources) {
          if (sources == null || sources.length < 2) {
              throw new InvalidArgument(
                      "Source kam nodes cannot be null and must contain at least two source nodes.");
          }
  
          // build out target set, check that each node is in the KAM
          final Set<KamNode> targetSet = new HashSet<KamNode>(sources.length);
          for (int i = 0; i < sources.length; i++) {
              final KamNode source = sources[i];
  
              if (!kam.contains(source)) {
                  throw new InvalidArgument("Source does not exist in KAM.");
              }
  
              targetSet.add(source);
          }
  
          final List<SimplePath> pathsFound = new ArrayList<SimplePath>();
          for (final KamNode source : sources) {
              // remove source from target before search to prevent search the same
              // paths twice in the bidirectional search
              targetSet.remove(source);
              pathsFound.addAll(runDepthFirstSearch(kam, source, targetSet));
          }
          return pathsFound.toArray(new SimplePath[pathsFound.size()]);
      }
docs: {@inheritDoc}