Pagini recente » Cod sursa (job #2361270) | Cod sursa (job #2022957) | Cod sursa (job #591755) | Monitorul de evaluare | Cod sursa (job #1824706)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("curcubeu.in");
ofstream out("curcubeu.out");
const int nMax = 1000005;
int n;
int a[nMax], b[nMax], c[nMax];
int v[nMax];
int urm[nMax];
void citire()
{
in >> n;
in >> a[1] >> b[1] >> c[1];
}
int GetNext(int j)
{
if(j < n && v[j] != 0)
urm[j] = GetNext(urm[j]);
return urm[j];
}
void rezolvare()
{
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;
urm[i-1] = i;
}
int st, dr;
for(int i = n-1; i > 0; --i)
{
st = min(a[i], b[i]);
dr = max(a[i], b[i]);
int j = st;
while(j <= dr)
{
if(v[j] == 0)
{
v[j] = c[i];
urm[j] = dr + 1;
++j;
}
else
j = GetNext(j);
}
}
}
void afisare()
{
for(int i = 1; i < n; ++i)
out << v[i] << "\n";
}
int main()
{
citire();
rezolvare();
afisare();
return 0;
}