Pagini recente » Cod sursa (job #1681693) | Cod sursa (job #835889) | Cod sursa (job #3136818) | Cod sursa (job #2249381) | Cod sursa (job #1651428)
#include <stdio.h>
#include <stack>
#include <algorithm>
#define nmax 1000010
using namespace std;
int n,a,b,c;
int ti[nmax],color[nmax],st[nmax],dr[nmax],sol[nmax];
stack <int> stt;
int main()
{
freopen("curcubeu.in","r",stdin);
freopen("curcubeu.out","w",stdout);
scanf("%d %d %d %d",&n,&a,&b,&c);
ti[min(a,b)]=ti[max(a,b)]=1; color[1]=c; dr[1]=max(a,b);
for (int i=2;i<=n-1;i++) {
a=(a*i)%n; b=(b*i)%n; c=(c*i)%n;
ti[min(a,b)]=i; ti[max(a,b)]=i;
color[i]=c; st[i]=min(a,b); dr[i]=max(a,b);
}
for (int i=1;i<=n-1;i++) {
if (stt.size()==0 && ti[i]>0) stt.push(ti[i]),sol[i]=color[ti[i]];
if (stt.size()>0 && ti[i]<=stt.top()) sol[i]=color[stt.top()];
if (stt.size()>0 && i==dr[stt.top()]) stt.pop();
}
for (int i=1;i<=n-1;i++) printf("%d\n",sol[i]);
return 0;
}