#include <bits/stdc++.h>
using namespace std;
FILE *f1 = fopen("radixsort.in", "r");
FILE *f2 = fopen("radixsort.out", "w");
queue<int> counter[256], aux_counter[256];
unsigned int aux;
int main() {
int n, a, b, c, i, j;
fscanf(f1, "%d%d%d%d", &n, &a, &b, &c);
fclose(f1);
int cr, prev;
// byte 0
cr = b;
aux = cr & 255;
counter[aux].push(cr);
prev = cr;
for (i = 2; i <= n; i++) {
cr = ((1LL * a * prev) % c + b) % c;
aux = cr & 255;
counter[aux].push(cr);
prev = cr;
}
// byte 1
for (i = 0; i < 256; i++) {
while (!counter[i].empty()) {
cr = counter[i].front();
counter[i].pop();
aux = (cr >> 8) & 255;
aux_counter[aux].push(cr);
}
}
// byte 2
for (i = 0; i < 256; i++) {
while (!aux_counter[i].empty()) {
cr = aux_counter[i].front();
aux_counter[i].pop();
aux = (cr >> 16) & 255;
counter[aux].push(cr);
}
}
// byte 3
for (i = 0; i < 256; i++) {
while (!counter[i].empty()) {
cr = counter[i].front();
counter[i].pop();
aux = (cr >> 24) & 255;
aux_counter[aux].push(cr);
}
}
// print
prev = 0;
for (i = 0; i < 256; i++) {
while (!aux_counter[i].empty()) {
cr = aux_counter[i].front();
aux_counter[i].pop();
if (prev % 10 == 0) {
fprintf(f2, "%d ", cr);
prev = 1;
}
else prev++;
}
}
fclose(f2);
return 0;
}