#include <cstdio>
#include <algorithm>
using namespace std;
#define file_in "curcubeu.in"
#define file_out "curcubeu.out"
#define nmax 1010000
int n,i,j,N;
int a,b,c;
int cul[4*nmax];
int tip[4*nmax];
int cc,t,T;
int A,B,C;
void update(int x, int y ,int nod){
if (A<=x && y<=B){
cul[nod]=C;
tip[nod]=t;
return ;
}
int mij=(x+y)>>1;
if (A<=mij) update(x,mij,2*nod);
if (B>mij) update(mij+1,y,2*nod+1);
}
void query(int x, int y, int nod, int c, int t){
if (tip[nod]>t){
t=tip[nod];
c=cul[nod];
}
if (x==y){
printf("%d\n", c);
return ;
}
int mij=(x+y)>>1;
query(x,mij,2*nod,c,t);
query(mij+1,y,2*nod+1,c,t);
}
int main(){
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d %d %d", &N, &A,&B,&C);
a=A;
b=B;
A=min(a,b);
B=max(a,b);
update(1,N-1,1);
A=a;
B=b;
for (t=2;t<N;++t){
A=(A*t)%N;
B=(B*t)%N;
C=(C*t)%N;
a=A;
b=B;
A=min(a,b);
B=max(a,b);
update(1,N-1,1);
A=a;
B=b;
}
query(1,N-1,1,-1,-1);
return 0;
}