private static void dfs(Node node) {
		tracingNodeStack.add(node);
		node.val++;
		Map<String, List<Integer>> values = questionMap.get(node.name);
		if (values != null) {
			for (Entry<String, List<Integer>> entry : values.entrySet()) {
				String questionPart2 = entry.getKey();
				if (nodeMap.get(questionPart2).val == Node.in) {
					// key1 in, key2 in, then key2 is father
					for (int inx : entry.getValue()) {
						answer[inx] = questionPart2;
					}
				} else if (nodeMap.get(questionPart2).val == Node.out) {
					// key1 in, key2 out
					Node n = nodeMap.get(questionPart2);
					Node father = getLatestInNode(n);
					for (int inx : entry.getValue()) {
						answer[inx] = father.name;
					}
					n.father = father;
				}

			}
		}
		if (!node.children.isEmpty()) {
			for (Node child : node.children) {
				dfs(child);
			}
		}
		// leave this node
		node.val++;
		tracingNodeStack.pop();
	}