private void load_data (BufferedReader in, DirectedSparseGraph<String, Integer> graph) throws IOException {
		long start = System.currentTimeMillis() ;
		int edgeCnt = 0;
		String line;
		while ((line = in.readLine()) != null) {
			StringTokenizer st = new StringTokenizer(line);
			String source = null;
			if ( st.hasMoreTokens() ) {
				source = st.nextToken();
				if (graph.addVertex(source))
					LOG.debug(String.format("Added verted %s to the graph", source));
			}

			HashSet<String> seen = new HashSet<String>() ;
			while ( st.hasMoreTokens() ) {
				String destination = st.nextToken();
				if (graph.addVertex(destination)) // implicit dangling nodes
					LOG.debug(String.format("Added verted %s to the graph", destination));				
				if (!destination.equals(source)) { // no self-references
					if (!seen.contains(destination)) { // no duplicate links
						graph.addEdge(new Integer(edgeCnt++), source, destination);
						seen.add(destination) ;
					}
				}
			}
		}
		in.close();
		
		LOG.debug(String.format("Loaded %d nodes and %d links in %d ms", graph.getVertexCount(), graph.getEdgeCount(), (System.currentTimeMillis()-start)));
	}