Cod sursa(job #466050)
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cassert>
using namespace std;
const int MAXP = 1000010;
int N, M, P, Sum;
int A[MAXP], S1[MAXP], S2[MAXP];
int main()
{
ifstream fin("congr.in");
ofstream fout("congr.out");
srand(time(0));
fin >> P;
for (int i = 1; i < 2*P; ++i)
{
fin >> A[i];
S2[i] = i;
}
M = 2*P - 1;
int pas = 1;
for (int i = 1; i <= P; ++i)
{
int x = rand() % M + 1;
S1[++N] = S2[x];
S2[x] = S2[M--];
Sum = (Sum + A[S1[N]]) % P;
}
while (Sum != 0)
{
++pas;
int x = rand() % N + 1;
int y = rand() % M + 1;
Sum = (Sum - A[S1[x]] + A[S2[y]]) % P;
int temp = S1[x];
S1[x] = S2[y];
S2[y] = temp;
}
for (int i = 1; i <= P; ++i) fout << S1[i] << " ";
fout << endl;
assert(1 <= pas && pas <= 1000000);
cout << pas << endl;
return 0;
}