Pagini recente » Cod sursa (job #1247787) | Cod sursa (job #319183) | Cod sursa (job #539927) | Cod sursa (job #554463) | Cod sursa (job #2535296)
#include <bits/stdc++.h>
using namespace std;
const int N = 1000005;
int n;
int a[N], b[N], c[N], p[N], ans[N];
ifstream in("curcubeu.in");
ofstream out("curcubeu.out");
int prod(int a, int b) {
return (a * b) % n;
}
int fnd(int x) {
int R = x;
while(x != p[x]) {
x = p[x];
}
while(R != p[R]) {
int aux = p[R];
p[R] = x;
R = aux;
}
return x;
}
void uni(int x, int y) {
p[x] = y;
}
int main() {
in >> n >> a[1] >> b[1] >> c[1];
for (int i = 2; i <= n - 1; i++) {
a[i] = prod(a[i - 1], i);
b[i] = prod(b[i - 1], i);
c[i] = prod(c[i - 1], i);
}
for (int i = 1; i <= n + 1; i++) {
p[i] = i;
ans[i] = -1;
}
for (int i = n - 1; i >= 1; i--) {
int start = min(a[i], b[i]);
int en = max(a[i], b[i]);
start = fnd(start);
while(start <= en) {
if (ans[start] == -1) {
ans[start] = c[i];
uni(start, en);
}
start++;
start = fnd(start);
}
}
for (int i = 1; i <= n - 1; i++) {
ans[i] == -1 ? out << "0\n" : out << ans[i] << "\n";
}
return 0;
}