public void subsetsWithDupRec(int [] num, int start, Stack<Integer> stk){
		for(int i = start; i < num.length; ++i){
//            if(i > start && num[i] == num[i-1]) continue;
			stk.push(num[i]);
			res.add(new ArrayList<Integer>(stk));
            // start from i+1 instead of "start+1", in certain level, start won't change
//            subsetsWithDupRec(num, start+1, stk);
			subsetsWithDupRec(num, i+1, stk);
			stk.pop();
            while (i < num.length - 1 && num[i] == num[i+1]) ++i;
		}
	}