Pagini recente » Cod sursa (job #1934508) | Cod sursa (job #2350504) | Cod sursa (job #1262817) | Cod sursa (job #1923895) | Cod sursa (job #1876391)
#include <cstdio>
#include <algorithm>
using namespace std;
#define max 1000003
int n, a[max], b[max], c[max], v[max], boss[max];
int Find (int x)
{
if (boss[x] == 0){
return x;
}
boss[x] = Find (boss[x]);
return boss[x];
}
void Union (int left, int right, int color)
{
while (left <= right){
if (v[left] != 0){
left = Find (left);
}
if (left <= right){
v[left] = color;
boss[left] = left + 1;
left ++;
}
}
}
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] = (a[i-1] * i) % n;
b[i] = (b[i-1] * i) % n;
c[i] = (c[i-1] * i) % n;
}
for (int i=n; i>0; i--){
if (a[i] > b[i]){
swap (a[i], b[i]);
}
Union (a[i], b[i], c[i]);
}
for (int i=1; i<n; i++){
printf ("%d\n", v[i]);
}
return 0;
}