public static List<List<Integer>> permute(int[] num) {
		List<List<Integer>> res =  new ArrayList();
		if(num.length<=0){
			return res;
		}else if(num.length==1){
			List tmp = new ArrayList();
			tmp.add(num[0]);
			res.add(tmp);
			return res;
		}else{
			//add first
			List<Integer> first = new LinkedList();
			for(int i=0;i<num.length;i++){
				first.add(i,num[i]);
			}
			res.add(first);
			List<Integer> tmpListP = null;
			List<Integer> tmpNewListP = null;
			//Iterator<List<Integer>> itr = null;//res.iterator();
			//swap list
			for(int idx=1;idx<num.length;idx++){
				int resLen = res.size();
				for(int resItr=0;resItr<resLen;resItr++){
					tmpListP = res.get(resItr);
					for(int tmpListItr=0;tmpListItr<idx;tmpListItr++){//swap 0~idx,last
						tmpNewListP = new LinkedList(tmpListP);
						int tmp = tmpNewListP.get(tmpListItr);
						tmpNewListP.set(tmpListItr,tmpNewListP.get(idx));
						tmpNewListP.set(idx,tmp);
						res.add(res.size(),tmpNewListP);
					}
//					System.out.println("====AF SWAP====");
//					for(int i=0;i<res.size();i++){
//						printList(res.get(i));
//					}
					
				}
				
			}
		}
		return res;
	}