#include<bits/stdc++.h> #define FILE "read" #define MAXN 5010 #define cmax(a,b) a=max(a,b) #define cmin(a,b) a=min(a,b) using namespace std; typedef long long ll; int n,m,Q,Up[MAXN],Dn[MAXN],ans[MAXN*2],x[MAXN*MAXN],T[MAXN*MAXN]; inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) {x=x*10+ch-'0'; ch=getchar();} return x*f; } void updata(int a,int b){ for(int i=1;i<=n;++i){ if(i<a) cmin(Up[i],b); if(i>a) cmax(Dn[i],b); } } int main(){ x[0]=read(); ll a=read(),b=read(),c=read(),d=read(); n=read(); m=read(); Q=read(); for(int i=1;i<=n;++i) Up[i]=m; for(int i=1;i<=n*m;++i){ x[i]=x[i-1]*(a*x[i-1]+b)%d+c; x[i]%=d; T[i]=i; } for(int i=1;i<=n*m;++i) swap(T[i],T[(x[i]%i)+1]); for(int i=1;i<=Q;++i){ int u=read(),v=read(); swap(T[u],T[v]); } for(int i=1;i<=n*m;++i) x[T[i]]=i; for(int i=1;i<=n*m;++i){ int a=x[i]/m,b=x[i]%m; if(x[i]%m) a++; if(!b) b+=m; if(b<=Up[a]&&b>=Dn[a]){ updata(a,b); ans[++ans[0]]=i; if(ans[0]==n+m-1) break; } } for(int i=1;i<=ans[0];++i){ printf("%d",ans[i]); if(i!=ans[0]) printf(" "); } return 0; }
|