#include <fstream>
using namespace std;
ifstream cin("curcubeu.in");
ofstream cout("curcubeu.out");
const int NMAX = 1e6;
int n, A, B, C;
int aint[4 * NMAX + 1];
int lazy[4 * NMAX + 1];
void UpdateLazy(int node, int left, int right)
{
if(lazy[node] != 0)
{
aint[node] = lazy[node];
if(left != right)
{
lazy[node * 2] = lazy[node];
lazy[node * 2 + 1] = lazy[node];
}
lazy[node] = 0;
}
}
void Update(int node, int left, int right, int Uleft, int Uright, int value)
{
UpdateLazy(node, left, right);
if(left >= Uleft && right <= Uright)
{
lazy[node] = value;
UpdateLazy(node, left, right);
return;
}
int mid = (left + right) / 2;
if(mid >= Uleft)
Update(node * 2, left, mid, Uleft, Uright, value);
if(mid + 1 <= Uright)
Update(node * 2 + 1, mid + 1, right, Uleft, Uright, value);
}
void GetValues(int node, int left, int right)
{
UpdateLazy(node, left, right);
if(left == right)
{
cout << aint[node] << '\n';
return;
}
int mid = (left + right) / 2;
GetValues(node * 2, left, mid);
GetValues(node * 2 + 1, mid + 1, right);
}
int main()
{
cin >> n >> A >> B >> C;
for(int i = 2; i <= n; i++)
{
Update(1, 1, n - 1, min(A, B), max(A, B), C);
A = (A * i) % n;
B = (B * i) % n;
C = (C * i) % n;
}
GetValues(1, 1, n - 1);
return 0;
}