#include <stdio.h>
FILE *fout= fopen("curcubeu.out","w");
int arb[3000010];
int MIN(int x,int y){
if(x<y)
return x;
return y;
}
int MAX(int x,int y){
if(x>y)
return x;
return y;
}
void insert(int ind, int li, int lf, int a,int b, int C){
if(b < a)
return;
if(lf<a || b<li)
return;
if(a<=li && lf<=b){
arb[ind] = C;
return;
}
if(arb[ind] >= 0){
arb[2*ind] = arb[2*ind+1] = arb[ind];
arb[ind] = -1;
}
int mij = (li+lf) >> 1;
insert(2*ind, li, mij, a,b,C);
insert(2*ind+1, mij+1, lf, a,b,C);
if(arb[ind] == -1 && arb[2*ind] == arb[2*ind+1] && arb[2*ind] >= 0)
arb[ind] = arb[2*ind];
}
void afish(int ind,int li,int lf){
if(lf < li)
return;
if(arb[ind] >= 0){
for(int i=li; i<=lf;i++)
if(i)
fprintf(fout,"%d\n",arb[ind]);
}
else{
int mij = (li+lf) >> 1;
afish(2*ind, li, mij);
afish(2*ind+1, mij+1, lf);
}
}
int main(){
FILE *fin = fopen("curcubeu.in","r");
int N,A,B,C;
fscanf(fin,"%d%d%d%d",&N,&A,&B,&C);
arb[1] = 0;
insert(1,0,N-1,MIN(A,B), MAX(A,B),C);
for(int t = 2; t<N; t++){
A = (int) ( ((long long)A * (long long)t )%(long long)N );
B = (int) ( ((long long)B * (long long)t )%(long long)N );
C = (int) ( ((long long)C * (long long)t )%(long long)N );
insert(1,0,N-1,MIN(A,B), MAX(A,B) , C);
}
afish(1,0,N-1);
fclose(fin);
fclose(fout);
return 0;
}