code: @Override
      protected List<Pair<Integer, Integer>> doGenerateEdges() {
          final int edgesPerNewNode = getConfiguration().getEdgesPerNewNode();
          final long numberOfNodes = getConfiguration().getNumberOfNodes();
  
          // Create a completely connected network
          final List<Pair<Integer, Integer>> edges
                  = new CompleteGraphRelationshipGenerator(new NumberOfNodesBasedConfig(edgesPerNewNode + 1)).doGenerateEdges();
  
          // Preferentially attach other nodes
          final Set<Integer> omit = new HashSet<>(edgesPerNewNode);
          for (int source = edgesPerNewNode + 1; source < numberOfNodes; source++) {
              omit.clear();
  
              for (int edge = 0; edge < edgesPerNewNode; edge++) {
                  while (true) {
                      Pair<Integer, Integer> randomEdge = edges.get(random.nextInt(edges.size()));
                      int target = random.nextBoolean() ? randomEdge.first() : randomEdge.other();
  
                      if (omit.contains(target)) {
                          continue;
                      }
  
                      omit.add(target); // to avoid multi-edges
  
                      edges.add(Pair.of(target, source));
  
                      break;
                  }
              }
          }
  
          return edges;
      }
docs: {@inheritDoc}