private WeightedMultigraph<Vertex, LabeledWeightedEdge> step1() {

    logger.debug("<enter");

    WeightedMultigraph<Vertex, LabeledWeightedEdge> g =
        new WeightedMultigraph<Vertex, LabeledWeightedEdge>(LabeledWeightedEdge.class);

    for (int i = 0; i < steinerNodes.size(); i++) {
      g.addVertex(steinerNodes.get(i));
    }

    BellmanFordShortestPath<Vertex, LabeledWeightedEdge> path;

    for (int i = 0; i < steinerNodes.size(); i++) {
      path =
          new BellmanFordShortestPath<Vertex, LabeledWeightedEdge>(this.graph, steinerNodes.get(i));

      for (int j = 0; j < steinerNodes.size(); j++) {

        if (i == j) continue;

        if (g.containsEdge(steinerNodes.get(i), steinerNodes.get(j))) continue;

        String id = "e" + String.valueOf(i) + String.valueOf(j);
        LabeledWeightedEdge e = new LabeledWeightedEdge(id, new URI(id, null, null), null);
        g.addEdge(steinerNodes.get(i), steinerNodes.get(j), e);
        g.setEdgeWeight(e, path.getCost(steinerNodes.get(j)));
      }
    }

    logger.debug("exit>");

    return g;
  }