@Override
	public String toString() {
		switch (operation) {
			case 'N':
				return "vertex with null fields";

			case 'L':
				if (right.operation == 'V') {
					return '\\' + left.propose + '.' + right.propose;
				}
				return '\\' + left.propose + ".(" + right.toString() + ")";

			case 'A':
				StringBuilder s = new StringBuilder();
				if (left.operation != 'V') {
					s.append('(');
					s.append(left.toString());
					s.append(')');
				} else {
					s.append(left.propose);
				}
				s.append(' ');
				if (right.operation != 'V') {
					s.append('(');
					s.append(right.toString());
					s.append(')');
				} else {
					s.append(right.propose);
				}
				return s.toString();

			case 'V':
				return propose;

			case 'F':
				return "func";
			default:
				break;
		}
		return null;
	}