public static int firstMissingPositive(int[] A) {
        int i = 0;
        while(i < A.length){
            if(A[i] >= 1 && A[i] != i + 1 && A[i] < A.length && A[i] != A[A[i] - 1])
                swap(A, i, A[i] - 1);
            else
                i++;
        }
        for(i = 0; i < A.length; i++){
            if(A[i] != i + 1) return i + 1;
        }
        return A.length + 1;
    }