import java.util.*;

class Vertex {

    String name;
    LinkedList<Edge> edgeList ;

    public Vertex(String s) {
	name = s;
        edgeList = new LinkedList<Edge>();
    }
}

class Edge {
    Vertex origin;
    Vertex destination;
    double cost;

    // edge has no direction, so origin and destination are misnomers

    public Edge(Vertex o, Vertex d, double w) {
        origin = o;
        destination = d;
        cost = w;
    }
}

public class UndGraph {
    
    Hashtable<String,Vertex> h;

    public UndGraph() {
	h = new Hashtable<String, Vertex>();
    }

    public void addVertex(String s) {
        Vertex v = new Vertex(s);
        h.put(s,v);
    }

    public void addEdge(String s1, String s2, double w) {
        Vertex u = h.get(s1);
        Vertex v = h.get(s2);
        if ( (u != null) && (v !=null) ) 
	    {
                Edge e = new Edge(u,v,w);
		u.edgeList.add(e);
                v.edgeList.add(e);
            }
    }

    public void printGraph() {
	Collection<Vertex> vertexList = h.values();

        for(Vertex v: vertexList) {
	    System.out.print(v.name + " :");
	    for(Edge e: v.edgeList) {
                if (e.origin == v) 
                    System.out.print(" " + e.destination.name);
                else
                    System.out.print(" " + e.origin.name);
	    }

            System.out.println(" ");
	}
    }


    /*
    public LinkedList<Edge> mst(){}
    */

    public static void main(String argv []) {
    
	UndGraph g = new UndGraph();
        g.addVertex("A");
        g.addVertex("B");
        g.addVertex("C");
        g.addVertex("D");
        g.addVertex("E");
        g.addVertex("F");
        g.addVertex("G");
        g.addEdge("A","B",2);
        g.addEdge("A","C",4);
        g.addEdge("A","D",1);
        g.addEdge("B","D",3);
        g.addEdge("B","E",10);
        g.addEdge("C","D",2);
        g.addEdge("C","F",5);
        g.addEdge("D","E",7);
        g.addEdge("D","F",8);
        g.addEdge("D","G",4);
        g.addEdge("E","G",6);
        g.addEdge("F","G",1);
        g.printGraph();



    }

}

    