#include <iostream>
#include <fstream>
#define ll long long
using namespace std;
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");
const int MAX=1e6;
int n,i,j,v[MAX+5],sum;
ll a,b,c;
struct node{
int sum,lazy;}A[4*MAX+5];
void propagate(int nod ,int st ,int dr)
{
if (A[nod].lazy!=0)
{
A[nod].sum=A[nod].lazy;
if (st!=dr)
{
A[2*nod].lazy=A[nod].lazy;
A[2*nod+1].lazy=A[nod].lazy;
}
A[nod].lazy=0;
}
}
void updatelazy(int nod, int st ,int dr ,int a, int b, int val)
{
if (a<=st && dr<=b)
{
A[nod].lazy=val;
propagate(nod,st,dr);
}
else
{
int mij=(st+dr)>>1;
if (a<=mij)
updatelazy(2*nod,st,mij,a,b,val);
if (b>mij)
updatelazy(2*nod+1,mij+1,dr,a,b,val);
propagate(2*nod,st,mij);
propagate(2*nod+1,mij+1,dr);
}
}
void query(int nod, int st ,int dr ,int a, int b)
{
propagate(nod,st,dr);
if (a<=st && dr<=b)
sum+=A[nod].sum;
else
{
int mij=(st+dr)>>1;
if (a<=mij)
query(2*nod,st,mij,a,b);
if (b>mij)
query(2*nod+1,mij+1,dr,a,b);
propagate(2*nod,st,mij);
propagate(2*nod+1,mij+1,dr);
}
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(0); fout.tie(0);
fin>>n>>a>>b>>c;
for (i=1; i<=n-1; i++)
{
updatelazy(1,1,n-1,min(a,b),max(a,b),c);
a=(ll)a*(ll)(i+1)%(ll)n;
b=(ll)b*(ll)(i+1)%(ll)n;
c=(ll)c*(ll)(i+1)%(ll)n;
}
for (i=1; i<=n-1; i++)
{
sum=0;
query(1,1,n-1,i,i);
fout<<sum<<"\n";
}
return 0;
}