Cod sursa(job #940598)
#include <stdlib.h>
#include <fstream>
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <string.h>
#include <iomanip>
#include <time.h>
#include <list>
#include <algorithm>
#include <math.h>
#include <assert.h>
using namespace std;
const string file = "curcubeu";
const string infile = file + ".in";
const string outfile = file + ".out";
#define MAXN 1000005
int Cul[MAXN];
int Next[MAXN];
int A[MAXN], B[MAXN], C[MAXN];
int N;
void citire()
{
ifstream fin(infile.c_str());
fin >> N >> A[1] >> B[1] >> C[1];
fin.close();
}
inline void color(int a, int b, int c)
{
for(int i = a, aux; i <= b; aux = Next[i], Next[i] = b + 1, i = aux)
{
if(Cul[i] == 0)
Cul[i] = c;
}
}
void solve()
{
for(int i = 1; i < N + 1; i++)
{
Next[i] = i + 1;
}
if(A[1] > B[1]) swap(A[1], B[1]);
for(int i = 2; i < N; i++)
{
A[i] = (1LL * (A[i-1] * i)) % N;
B[i] = (1LL * (B[i-1] * i)) % N;
C[i] = (1LL * (C[i-1] * i)) % N;
if(A[i] > B[i]) swap(A[i], B[i]);
}
for(int i = N-1; i >= 1; i--)
{
color(A[i], B[i], C[i]);
}
}
void afisare()
{
ofstream fout(outfile.c_str());
for(int i = 1; i < N; i++)
{
fout << Cul[i] << "\n";
}
fout.close();
}
int main()
{
citire();
solve();
afisare();
}