private void makeNiceNames(Vertex t, HashMap<String, String> intToName) {

		if (t == null) {
			return;
		}
		switch (t.operation) {
			case 'V': {
				if (intToName.containsKey(t.propose)) {
					t.propose = intToName.get(t.propose);
					t.countHashAndCo(false);
					return;
				}
				if (!freeProposes.contains(t.propose)) {
					throw new NullPointerException("We don't know this propose: " + t.propose);
				}
			}
			case 'A': {
				makeNiceNames(t.left, intToName);
				makeNiceNames(t.right, intToName);
				t.countHashAndCo(false);
				return;
			}
			case 'L': {
				String oldKey = t.left.propose;
				String oldValue = null;
				if (intToName.containsKey(oldKey)) {
					oldValue = intToName.get(oldKey);
				}

				String s;
				do {
					s = "x" + curCount;
					curCount++;
				}
				while (freeProposes.contains(s));
				intToName.put(oldKey, s);

				makeNiceNames(t.left, intToName);
				makeNiceNames(t.right, intToName);
				t.countHashAndCo(false);
				if (oldValue == null) {
					intToName.remove(oldKey);
				} else {
					intToName.put(oldKey, oldValue);
				}
			}
		}
	}