private SimpleGraph<Integer, DefaultEdge> addCAIDAmap(
			String mapFilenameCAIDA) throws Exception {

		SimpleGraph<Integer, DefaultEdge> mergedInternetGraph = new SimpleGraph<Integer, DefaultEdge>(
				DefaultEdge.class);

		try {
			FileReader fr = new FileReader(mapFilenameCAIDA);
			BufferedReader br = new BufferedReader(fr);

			String str = br.readLine();

			while (str != null) {

				// if the string does not start with 'D' (direct link) or 'I'
				// (indirect link), skip this string
				if (!str.startsWith("D") && !str.startsWith("I")) {
					str = br.readLine();
					continue;
				}

				// get first AS (or AS set of multihomed ASs)
				str = str.substring(str.indexOf("\t") + 1);
				String as1_str = str.substring(0, str.indexOf("\t"));

				// get second AS (or AS set of multihomed ASs)
				str = str.substring(str.indexOf("\t") + 1);
				String as2_str = str.substring(0, str.indexOf("\t"));

				// prepare arrays for ASs
				ArrayList<Integer> as1 = parseASsetCAIDA(as1_str);
				ArrayList<Integer> as2 = parseASsetCAIDA(as2_str);

				// add vertices and edge to the merged graph, if presented both
				// in file and graphAS
				for (Integer first : as1) {
					for (Integer second : as2) {
						if (graphAS.containsEdge(first, second)) {
							// add vertices (ASs names)
							mergedInternetGraph.addVertex(first);
							mergedInternetGraph.addVertex(second);
							// add edge (link betweeen ASs)
							mergedInternetGraph.addEdge(first, second);
						}
					}
				}

				// read next line
				str = br.readLine();
			}

			br.close();

		} catch (FileNotFoundException e) {
			logger.error("Error during reading map file", e);
			throw new Exception("Error during reading map file");
		} catch (IOException e) {
			logger.error("Error during reading map file", e);
			throw new Exception("Error during reading map file");
		}

		return mergedInternetGraph;
	}