class Permutation
{
int *orig;
int *curr;
int n;
int *perm;
int *temp;
public:
Permutation(int *o, int s)
{
n = s;
orig = new int[n];
memcpy(orig, o, n * sizeof(int));
curr = new int[n];
memcpy(curr, o, n * sizeof(int));
perm = new int [n];
memset(perm, 0, sizeof(int) * n);
temp = new int[n];
memset(temp, 0, sizeof(int) *n);
}
int *GetCurr()
{
return curr;
}
bool GenNext()
{
int i;
for (i = n-1; i >= 0; --i)
{
if (perm[i] != n - i)
{
++perm[i];
break;
}
}
if (i < 0)
{
return false;
}
for (int i = 0; i < n; ++i)
{
int r = -1;
for (j = 0; j < n &&; ++j)
{
if (temp[j] == 0)
{
++r;
if (r == perm[i])
{
curr[i] = orig[j];
temp[j] = 1;
break;
}
}
}
}
memset(temp, 0, sizeof(int) *n);
}
}