public static List<Integer> singleNumberIII(int[] A) {
        int xor = 0;
        for(int i = 0; i < A.length; i++){
            xor ^= A[i];
        }

        int mark = 1;
        while((mark & xor) == 0){
            mark <<= 1;
        }

        int num1 = 0, num2 = 0;
        for(int i = 0; i < A.length; i++){
            if((mark & A[i]) == 0){
                num1 ^= A[i];
            }else{
                num2 ^= A[i];
            }
        }

        List<Integer> result = new ArrayList<Integer>();
        result.add(num1);
        result.add(num2);
        return result;
    }