public static void Edmonds(Graph input) {
		input.setState(States.ARR_ADJ);
		Log.print(Log.system, "Edmonds algorithm:");
		// init...
		n = input.getVertexCount();
		used = new boolean[n];
		blossom = new boolean[n];
		mt = new int[n];
		p = new int[n];
		q = new int[n];
		base = new int[n];
		Arrays.fill(mt, -1);

		for (int i = 0; i < n; i++) {
			if (mt[i] == -1) {
				int v = findPath(input, i);
				while (v != -1) {
					int pv = p[v];
					int ppv = mt[pv];
					mt[v] = pv;
					mt[pv] = v;
					v = ppv;
				}
			}
		}

		for (int i = 0; i < n; i++)
			if (mt[i] != -1)
				if (mt[i] > i)
					System.out.println((mt[i] + 1) + " " + (i + 1));
	}