void bucket_sort(int A[],int n)
{
for(size_t i=0;i<n;++i)
{
while(A[i]!=i+1)
{
if(A[i]<=0||A[i]>n||A[i]==A[A[i]-1])
break;
swap(A[i],A[A[i]-1]);
}
}
}
int findFirstMissingPositive(int A[],int n)
{
bucket_sort(A,n);
for(size_t i=0;i<n;++i)
if(A[i]!=i+1)
return i+1;
return n+1;
}