#include <stdio.h>
#define NMAX 1000010
int a[NMAX*3];
inline int MIN(int a, int b) { return (a < b) ? (a) : (b); }
inline int MAX(int a, int b) { return (a > b) ? (a) : (b); }
#define mid(st, dr) (((st)+(dr)) >> 1)
#define left(i) ((i) << 1)
#define right(i) (((i) << 1)+1)
int c, res;
void update(int n, int st, int dr, int x, int y)
{
//printf("st = %d, dr = %d, c = %d, x = %d, y = %d\n", st, dr, c, x, y);
//printf("%d %d\n", st, dr);
//if(dr < st)
// {printf("<"); return ;}
if(x <= st && dr <= y)
{
//printf("ok\n");
a[n] = c;
}
if(st == dr)
return ;
int m = mid(st, dr);
if(x <= m)
update(left(n), st, m, x, y);
if(y > m)
update(right(n), m+1, dr, x, y);
}
void query(int n, int st, int dr, int x)
{
if(st == dr && st == x)
{
res = a[n];
return ;
}
if(st != dr)
{
int m = mid(st, dr);
if(x <= m)
query(left(n), st, m, x);
else
query(right(n), m+1, dr, x);
}
}
/*
void print(int n)
{
int x;
for(x = 1; x < n; ++x)
{
query(1, 1, n-1, x);
printf("%d ", res);
}
printf("\n");
}
*/
int main()
{
freopen("curcubeu.in", "r", stdin);
freopen("curcubeu.out", "w", stdout);
int n, a, b, i, x, y;
scanf("%d %d %d %d", &n, &a, &b, &c);
for(i = 1; i < n;)
{
x = MIN(a, b);
y = MAX(a, b);
update(1, 1, n-1, x, y);
//printf("%d %d %d\n", a, b, c);
//print(n);
++i;
a = (a * i) % n;
b = (b * i) % n;
c = (c * i) % n;
}
for(x = 1; x < n; ++x)
{
query(1, 1, n-1, x);
printf("%d\n", res);
}
return 0;
}