#include<stdio.h>
#define nmax 2000000
long v[nmax],n,a,b,c;
long min(long a,long b) {return (a<b)?a:b;}
long max(long a,long b) {return (a>b)?a:b;}
void add(long nod,long st,long dr,long a ,long b,long val)
{long mij;
mij=(st+dr)/2;
if(st>=a&&dr<=b)
{v[nod]=val;
return;}
//if(b<st||a>dr) return;
if(v[nod])
{v[nod*2]=v[nod*2+1]=v[nod];
v[nod]=0;}
if(a<=mij&&b>=st)
add(nod*2,st,mij,a,b,val);
if(a<=dr&&b>=mij+1)
add(nod*2+1,mij+1,dr,a,b,val);
}
long qst(long nod,long st,long dr,long val)
{long mij;
if(v[nod])
return v[nod];
mij=(st+dr)/2;
if(val<=mij&&val>=st) return qst(nod*2,st,mij,val);
else if(val>=mij+1&&val<=dr) return qst(nod*2+1,mij+1,dr,val);
}
int main()
{long i;
freopen("curcubeu.in","r",stdin);
scanf("%ld%ld%ld%ld",&n,&a,&b,&c);
for(i=1;i<n;i++)
{
add(1,1,n-1,min(a,b),max(b,a),c);
a=(a*(i+1))%n;
b=(b*(i+1))%n;
c=(c*(i+1))%n;
}
freopen("curcubeu.out","w",stdout);
for(i=1;i<n;i++)
printf("%ld\n",qst(1,1,n-1,i));
fclose(stdout);
return 0;
}