public DirectedGraph(String path) {
		// Read in file

		BufferedReader br = null;
		
		try {
			String line;
			
			br = new BufferedReader(new FileReader(path));
			
			while((line = br.readLine()) != null) {
				String[] s = line.split("\\s+");
				if (s.length >= 2) {
					Vertex v0;
					Vertex v1;
					
					if (debug) System.err.println("Read in: " + s[0] + "->" + s[1]);
					if (vertexList.containsKey(s[0])) {
						v0 = vertexList.get(s[0]);
					} else {
						v0 = new Vertex(s[0]);
						vertexList.put(s[0], v0);
					}
				
					if (vertexList.containsKey(s[1])) {
						v1 = vertexList.get(s[1]);
					} else {
						v1 = new Vertex(s[1]);
						vertexList.put(s[1], v1);
					}
					
					DirectedEdge de = new DirectedEdge(v0, v1);
					edgeList.add(de);
					
					v0.addOutEdge(de);
					v1.addInEdge(de);
				} else {
					System.err.println("Improper input file!");
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (br != null) {
					br.close();
				}
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
	}