Pagini recente » Cod sursa (job #1773281) | Cod sursa (job #1751556) | Cod sursa (job #2063090) | Cod sursa (job #138977) | Cod sursa (job #1979321)
#include <iostream>
#include <cstdio>
using namespace std;
const int NMAX = 1000000 + 5;
int n, n2;
int a[NMAX], b[NMAX], c[NMAX], vect[NMAX], lung[NMAX], t[NMAX];
bool painted[NMAX];
void read()
{
}
int findy(int a)
{
int r = a;
while (t[r])
r = t[r];
int x, y;
x = a;
while (x != r)
{
y = t[x];
t[x] = r;
x = y;
}
return r;
}
void unite(int a, int b)
{
a = findy(a);
b = findy(b);
if (a == b)
return ;
t[b] = a;
lung[a] += lung[b];
}
void rainbow(int x, int y, int cul)
{
for (int i = x; i <= y; i += lung[i])
{
if (!painted[i])
{
vect[i] = cul;
painted[i] = 1;
if (i >= 2 && painted[i - 1])
unite(i - 1, i);
if (i < n && painted[i + 1])
unite(i, i + 1);
}
i = findy(i);
}
}
int main()
{
freopen("curcubeu.in","r",stdin);
freopen("curcubeu.out","w",stdout);
scanf("%d%d%d%d",&n,&a[1],&b[1],&c[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]);
}
--n;
for (int i = 1; i <= n; ++i)
lung[i] = 1;
for (int i = n; i >=1; --i)
rainbow(a[i], b[i], c[i]);
for (int i = 1; i <= n; ++i)
printf("%d\n",vect[i]);
return 0;
}