#include <iostream>
#include <fstream>
#define NMax 1000005
using namespace std;
int AI[3*NMax], N, A, B, C;
inline int Max (int a, int b)
{
if (a>b)
{
return a;
}
return b;
}
inline int Min (int a, int b)
{
if (a<b)
{
return a;
}
return b;
}
void Build (int K, int L, int R)
{
int Mid=(L+R)>>1;
AI[K]=-1;
if (L==R)
{
return;
}
Build (K<<1, L, Mid);
Build ((K<<1)+1, Mid+1, R);
}
void Update (int K, int L, int R, int UL, int UR, int X)
{
int Mid=(L+R)>>1;
if (UL<=L and R<=UR)
{
AI[K]=X;
return;
}
if (AI[K]!=-1)
{
Update (K<<1, L, Mid, L, Mid, AI[K]);
Update ((K<<1)+1, Mid+1, R, Mid+1, R, AI[K]);
AI[K]=-1;
}
if (UL<=Mid)
{
Update (K<<1, L, Mid, UL, UR, X);
}
if (UR>Mid)
{
Update ((K<<1)+1, Mid+1, R, UL, UR, X);
}
}
int Query (int K, int L, int R, int X)
{
int Mid=(L+R)>>1;
if (AI[K]!=-1)
{
return AI[K];
}
if (X<=Mid)
{
return Query (K<<1, L, Mid, X);
}
else
{
return Query ((K<<1)+1, Mid+1, R, X);
}
}
void Read ()
{
ifstream fin ("curcubeu.in");
fin >> N >> A >> B >> C;
}
void Print ()
{
ofstream fout ("curcubeu.out");
for (int i=1; i<N; ++i)
{
fout << Query (1, 1, N-1, i) << "\n";
}
}
int main()
{
Read ();
Build (1, 1, N-1);
for (int i=1; i<N; ++i)
{
A=(A*i)%N;
B=(B*i)%N;
C=(C*i)%N;
Update (1, 1, N-1, Min (A, B), Max (A, B), C);
}
Print ();
return 0;
}