@Override
	public int combine(MDDManager ddmanager, int first, int other) {
		// NOTE: all operations do not return a node when merging it with itself (stable states, xor, ...)
		NodeRelation status = ddmanager.getRelation(first, other);

		MergeAction action = t[status.ordinal()];
		if (action == MergeAction.ASKME) {
			action = ask(ddmanager, status, first, other);
		}
		switch (action) {
			case CUSTOM:
				return custom(ddmanager, status, first, other);
				
			case RECURSIVE:
				return recurse(ddmanager, status, first, other);
				
			case THIS:
				return ddmanager.use(first);
			case OTHER:
				return ddmanager.use(other);
			case MIN:
				if (first > other) {
					return ddmanager.use(other);
				}
				return ddmanager.use(first);
			case MAX:
				if (first > other) {
					return ddmanager.use(first);
				}
				return ddmanager.use(other);
		}
		return -1;
	}