Pagini recente » Cod sursa (job #1582193) | Cod sursa (job #996201) | Cod sursa (job #1248511) | Cod sursa (job #453682) | Cod sursa (job #1823188)
#include <bits/stdc++.h>
#define maxN 1000002
using namespace std;
int n, ans[maxN], f[maxN], col;
FILE *fin = freopen("curcubeu.in", "r", stdin);
FILE *fout = freopen("curcubeu.out", "w", stdout);
int root(int x)
{
if (f[x] == 0)
return x;
int fx = x;
while (f[fx])
{
if (f[f[fx]] == 0)
fx = f[fx];
else
fx = f[f[fx]];
}
while (x != fx)
{
f[x] = fx;
x = f[x];
}
return fx;
}
struct query
{
int a, b, c;
} v[maxN];
void read()
{
scanf("%d %d %d %d", &n, &v[1].a, &v[1].b, &v[1].c);
for (int i = 2; i < n; ++ i)
{
v[i].a = (1LL * v[i - 1].a * i) % n;
v[i].b = (1LL * v[i - 1].b * i) % n;
v[i].c = (1LL * v[i - 1].c * i) % n;
}
}
void solve()
{
int i, aux, l, r;
for (i = n - 1; i >= 1; -- i)
{
if (v[i].a > v[i].b)
{
aux = v[i].b;
v[i].b = v[i].a;
v[i].a = aux;
}
l = v[i].a;
r = v[i].b;
if (!ans[r])
r = root(r);
while (l <= r)
{
if (!ans[l])
{
++ col;
ans[l] = v[i].c;
if (col == n - 1)
break;
if (l != r)
f[l] = r;
++ l;
}
else
l = root(l) + 1;
}
}
}
void write()
{
for (int i = 1; i < n; ++ i)
printf("%d\n", ans[i]);
}
int main()
{
read();
solve();
write();
return 0;
}