Cod sursa(job #940595)
#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 1000003
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();
}
void color(int a, int b, int c)
{
int i = a;
while(i <= b)
{
int aux = Next[i];
if(Cul[i] == 0)
Cul[i] = c;
Next[i] = b + 1;
i = aux;
}
}
void solve()
{
for(int i = 1; i < N; i++)
{
Next[i] = i + 1;
}
if(A[1] > B[1]) swap(A[1], B[1]);
for(int i = 2; i < N; i++)
{
A[i] = (A[i-1] * i) % N;
B[i] = (B[i-1] * i) % N;
C[i] = (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();
}