#include<stdio.h>
#define nmax 4000000
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;
add(nod*2,st,mij,a,b,val);
add(nod*2+1,mij+1,dr,a,b,val);
}
long qst(long nod,long st,long dr,long val)
{long mij;
if(st==dr&&st==val)
return v[nod];
mij=(st+dr)/2;
if(val<=mij&&val>=st) return qst(nod*2,st,mij,val);
else if(val>=mij&&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),min(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;
}