import java.util.*;

class Vertex {

    String name;
    LinkedList<Edge> adjList ;

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

class Edge {
    Vertex vert;

    public Edge(Vertex v) {
        vert = v;
    }
}

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) {
        Vertex u = h.get(s1);
        Vertex v = h.get(s2);
        if ( (u != null) && (v !=null) ) 
	    {
		u.adjList.add(new Edge(v));
                v.adjList.add(new Edge(u));
            }
    }

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

        for(Vertex v: vertexList) {
	    System.out.print(v.name + " :");
	    for(Edge e: v.adjList) 
		System.out.print(" " + e.vert.name);
            System.out.println(" ");
	}
    }



    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");
        g.addEdge("B","C");
        g.addEdge("C","D");
        g.addEdge("D","A");
        g.addEdge("C","G");
        g.addEdge("D","E");
        g.addEdge("D","F");
        g.addEdge("E","F");
        g.printGraph();



    }

}

    