Cod sursa(job #763914)
#include<fstream>
#include<cstdio>
using namespace std;
FILE *g;
int a[1000001], b[1000001], c[1000001];
int n,i,j,aux,e[1000001],d[1000001];
int main(void){
ifstream fin("curcubeu.in");
g=fopen("curcubeu.out","w");
fin>>n>>a[1]>>b[1]>>c[1];
for (i=2; i<n; ++i){
a[i]=((long long)a[i-1]*i)%n;
b[i]=((long long)b[i-1]*i)%n;
c[i]=((long long)c[i-1]*i)%n;
d[i]=i;
if (a[i]>b[i]){aux=a[i]; a[i]=b[i]; b[i]=aux;}
}
for (i=n-1; i>0; --i){
for (j=a[i]; j<=b[i];)
if (e[j]==0) {e[j]=c[i]; d[j]=b[i]+1; ++j; }
else j=d[j];
}
for (i=1; i<n; ++i) fprintf(g,"%d\n",e[i]);
return(0);
}