Input :
  A[4] = {0,4,-1,1000} - Actual Array
  P[4] = {1,0,3,2} - Order to be reshuffled 
Output:
    A[4] = {4,0,1000,-1}
Condition : Don't use an additional array as memory. Can use an extra variable or two. 
Problem : I have the below program in C++, but this fails for certain inputs of array P. 
#include<iostream>
using namespace std;
void swap(int *a_r,int *r)
{
    int temp = *r;
    *r = *a_r;
    *a_r = temp;
}
int main()
{
    int A[4] = {0,4,-1,1000};
    int P[4] = {3,0,1,2};
    int value = A[0] , dest = P[0];
    for(int i=0; i<4;i++)
    {
        swap(&A[dest],&value);
        dest = P[dest];
    }
    for(int i=0;i<4;i++)
        cout<<A[i]<<" ";
}