program curcubeu;
var f,g:text;
v,v1:array[1..3000001] of longint;
n:longint;
procedure update_aint(nod,a,b,c,x,y:longint);
var m:longint;
begin
if (a<=x)and(y<=b) then
v[nod]:=c else
begin
m:=(x+y) div 2;
if v[nod]<>-1 then
begin
v[nod*2]:=v[nod];
v[nod*2+1]:=v[nod];
v[nod]:=-1;
end;
if (a<=m) then
begin
update_aint(nod*2,a,b,c,x,m);
end;
if (b>m) then
begin
update_aint(nod*2+1,a,b,c,m+1,y);
end;
end;
end;
procedure query_aint(nod,x,y:longint);
var m,i:longint;
begin
if v[nod]<>-1 then
begin
for i:=x to y do
v1[i]:=v[nod];
end else
begin
m:=(x+y) div 2;
query_aint(nod*2,x,m);
query_aint(nod*2+1,m+1,y);
end;
end;
function min(x,y:longint):longint;
begin
if x<y then min:=x else
min:=y;
end;
function max(x,y:longint):longint;
begin
if x>y then max:=x else
max:=y;
end;
procedure van;
var i,a,b,c:longint;
begin
assign(f,'curcubeu.in');reset(f);
assign(g,'curcubeu.out');rewrite(g);
readln(f,n,a,b,c);
close(f);
v[1]:=0;
update_aint(1,min(a,b),max(a,b),c,1,n-1);
for i:=2 to n-1 do
begin
a:=(a*i) mod n;
b:=(b*i) mod n;
c:=(c*i) mod n;
update_aint(1,min(a,b),max(a,b),c,1,n-1);
end;
query_aint(1,1,n-1);
for i:=1 to n-1 do
writeln(g,v1[i]);
close(g);
end;
procedure ila;
begin
end;
begin
van;ila;
end.