private void readCAIDAmap() throws Exception {
		try {
			FileReader fr = new FileReader(this.mapFilenameCAIDA1);
			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 all to the graph
				for (Integer first : as1) {
					for (Integer second : as2) {
						// add vertices if not already present
						graphAS.addVertex(first);
						graphAS.addVertex(second);
						// add edge
						try {
							graphAS.addEdge(first, second);
						} catch (Exception e) { // stupid library could throw an
												// exception like
												// "loops not allowed"
												// I will catch them all!
							logger.error(
									"Error during adding link to the graph. Link will be ignored.",
									e);
							continue;
						}
					}
				}

				// 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");
		}
	}