public void dfs(ArrayList<Integer> temp, int[] num, boolean[] visited) {
		if (temp.size() == num.length) {
			result.add(new ArrayList<Integer>(temp));
			// result.add(temp);
			return;
		}
		for (int i = 0; i < num.length; i++) {
			if (visited[i] == false) {
				visited[i] = true;
				temp.add(num[i]);
				dfs(temp, num, visited);
				visited[i] = false;
				temp.remove(temp.size() - 1);
				while (i + 1 < num.length && num[i] == num[i + 1]) {
					i++;
				}
			}
		}
	}