Cod sursa(job #728500)
#include<cstdio>
#include<algorithm>
#define ll long long
#define dim 1000007
using namespace std;
long long A[dim],B[dim],C[dim],N,i,j,T[dim],t,a,b,sol[dim];
void calculate () {
for(int i=2; i<N ; ++i ){
A[i]= (ll) (A[i-1]*i )%N;
B[i]= (ll) (B[i-1]*i )%N;
C[i]= (ll) (C[i-1]*i )%N;
}
for(int i=1; i<=N ;++i)
T[i]=-1;
}
int tata(int x) {
int y , r ;
y=r=x ;
while( T[r]>0)
r=T[r];
while( y != r ){
t=T[y];
T[y]=r;
y=t;
}
return r;
}
void solve () {
for(int i=1 ; i<N ; ++i ) {
a=A[i];
b=B[i];
if( a > b)
swap( a , b );
for(int j=tata(a) ; j<=b ; j=tata(j+1)){
sol[j]=C[i];
}
}
for(int i=1 ; i<N ; ++i )
printf("%lld\n",sol[i]);
}
int main (){
freopen("curcubeu.in","r",stdin);
freopen("curcubeu.out","w",stdout);
scanf("%d%d%d%d",&N , &A[i], &B[1], &C[1]);
calculate();
solve();
return 0;
}