public static void subpermute(List<List<Integer>> res, List<Integer> l, int[] num) {
		if (0 == num.length) {
			List<Integer> t = new ArrayList<Integer>(l);
			res.add(t); 
			return;
		}
		else {
			for (int i = 0; i < num.length; i++) {
				if (i  > 0 && num[i] == num[i - 1]) continue;
				l.add(num[i]);
				int[] tmp = new int[num.length - 1];
				int delta = 0;
				for (int j = 0; j < num.length; j++) {
					if (j != i) {
						tmp[j - delta] = num[j];
					} else {
						delta = 1;
					}
				}
				subpermute(res, l, tmp);
				l.remove(l.size() - 1);
			}
		}
	}