Pagini recente » Cod sursa (job #441993) | Cod sursa (job #1970845) | Cod sursa (job #2403830) | Cod sursa (job #2612177) | Cod sursa (job #1076461)
#include<cstdio>
using namespace std;
const int MAXN=1000001;
int a[MAXN],b[MAXN],c[MAXN],n,cul[MAXN],end[MAXN],t[MAXN],next,i,j;
void comp(int x)
{
int temp;
if(a[x]>b[x])
{
temp=a[x];
a[x]=b[x];
b[x]=temp;
}
}
int rad(int x)
{
if(t[x]==x)
return x;
t[x]=rad(t[x]);
return t[x];
}
void unire(int x,int y)
{
int tx,ty;
tx=rad(t[x]);
t[x]=ty;
}
int main()
{
freopen("curcubeu.in","r",stdin);
freopen("curcubeu.out","w",stdout);
scanf("%d%d%d%d",&n,&a[1],&b[1],&c[1]);
comp(1);
for(i=2;i<=n-1;i++)
{
a[i]=(a[i-1]*i)%n;
b[i]=(b[i-1]*i)%n;
comp(i);
c[i]=(c[i-1]*i)%n;
}
for(i=n-1;i>=1;i--)
{
for(j=a[i];j<=b[i];j++)
{
if(!cul[j])
{
t[j]=j;
end[j]=j;
cul[j]=c[i];
if(t[j-1])
{
unire(j-1,j);
}
if(t[j+1])
{
unire(j,j+1);
}
}
else
{
next=rad(t[j]);
j=end[next];
}
}
}
for(i=1;i<n;i++)
{
printf("%d\n",cul[i]);
}
return 0;
}