public static List<List<Integer>> permuteUnique(int[] A) {
    	Arrays.sort(A);
		int n=A.length;
		List<List<Integer>>rel=new ArrayList<>();
		while (true) {
			rel.add(formList(A));
			int i=n-1;
			while (i>0&&A[i-1]>=A[i])
				--i;
			if (--i==-1)
				break;
			int j=n-1;
			while (j>i&&A[j]<=A[i])
				--j;
			swap(A,i,j);
			for (++i,j=n-1;i<j;++i,--j)
				swap(A,i,j);
		}
		return rel;
	}