public static void main(String[] args) {
    String[] graphVertexes = new String[] {"A", "B", "C", "D", "E"};
    boolean[][] adjacencyMatrix = makeRandomAdjacencyMatrix(graphVertexes);
    printAdjacencyMatrix(graphVertexes, adjacencyMatrix);

    System.out.println(
        "Vertex Set with Connections based on the above connections matrix (-> = root)");
    GraphImpl<String> letterGraph = makeNewGraph(graphVertexes, 2, adjacencyMatrix);
    System.out.println(letterGraph);

    System.out.println("The Depth First Search (DFS) elements");
    Iterator<String> dfsIterator = letterGraph.depthFirstSearchIterator();
    while (dfsIterator.hasNext()) {
      String value = dfsIterator.next();
      if (dfsIterator.hasNext()) {
        System.out.print(value + " -> ");
      } else {
        System.out.print(value);
      }
    }

    System.out.println("");
    System.out.println("The Breadth First Search (BFS) elements");
    Iterator<String> bfsIterator = letterGraph.breadthFirstSearchIterator();
    while (bfsIterator.hasNext()) {
      String value = bfsIterator.next();
      if (bfsIterator.hasNext()) {
        System.out.print(value + " -> ");
      } else {
        System.out.print(value);
      }
    }
  }
  /**
   * of the vertex values.
   *
   * @param vertexValues is a set of vertex values.
   * @param rootIndex is the root index of the vertex values considered the root.
   * @param adjacencyMatrix is the adjacency matrix.
   * @return A new graph with the vertex values, a chosen root index of the list and an adjacency
   *     matrix of the connections.
   */
  public static GraphImpl<String> makeNewGraph(
      String[] vertexValues, int rootIndex, boolean[][] adjacencyMatrix) {
    Preconditions.checkArgument(vertexValues != null, "The vertex values must be provided.");
    Preconditions.checkArgument(rootIndex >= 0, "The root index must be greater or equals to 0.");
    Preconditions.checkArgument(adjacencyMatrix != null, "The adjacency matrix must be provided.");

    GraphImpl<String> newGraph = new GraphImpl<>();
    newGraph.rootIndex = rootIndex;
    newGraph.vertexes = new Vertex[vertexValues.length];
    for (int i = 0; i < adjacencyMatrix.length; i++) {
      List<String> connections = makeConnections(vertexValues, adjacencyMatrix, i);
      newGraph.vertexes[i] = new Vertex<>(vertexValues[i], connections);
    }
    return newGraph;
  }