rt
#include<bits/stdc++.h>
#define int long long
#define re register
#define ls(u) tr[u].ls
#define rs(u) tr[u].rs
using namespace std;
const int N=2e6+10;
struct node
{
int ac,rib;
bool operator<=(const node a)
{
if(ac==a.ac)return rib<=a.rib;
else return ac>=a.ac;
}
}a[N];
int root,cnt,T1,T2,T3,stk[N],top;
struct FHQ
{
int ls,rs,key,siz;
node val;
}tr[N];
void up(int u){tr[u].siz=tr[ls(u)].siz+tr[rs(u)].siz+1;}
int merge(int x,int y)
{
if(!x||!y)return x+y;
if(tr[x].key<tr[y].key)
{
rs(x)=merge(rs(x),y);
up(x);
return x;
}
else
{
ls(y)=merge(x,ls(y));
up(y);
return y;
}
}
void split(int u,node val,int &x,int &y)
{
if(!u)
{
x=y=0;
return;
}
if(tr[u].val<=val)
{
x=u;
split(rs(u),val,rs(u),y);
}
else
{
y=u;
split(ls(u),val,x,ls(u));
}
up(u);
}
int newnode(node val)
{
int u;
if(top)u=stk[top--];
else u=++cnt;
tr[u].key=rand();
tr[u].siz=1;
tr[u].ls=tr[u].rs=0;
tr[u].val=val;
return u;
}
void insert(node pos)
{
split(root,pos,T1,T2);
root=merge(merge(T1,newnode(pos)),T2);
}
void del(node pos)
{
node p=pos;
--p.rib;
split(root,pos,T1,T3);
split(T1,p,T1,T2);
stk[++top]=T2;
T2=merge(ls(T2),rs(T2));
root=merge(merge(T1,T2),T3);
}
int ask_val(node pos)
{
--pos.rib;
split(root,pos,T1,T2);
int r=tr[T1].siz;
root=merge(T1,T2);
return r;
}
typedef unsigned int ui;
ui randNum(ui& seed, ui last, const ui m) {
seed = seed * 17 + last;
return seed % m + 1;
}
ui seed,last=7;
int m,n;
signed main()
{
int T;
scanf("%lld",&T);
while(T--)
{
srand(19260817);
root=cnt=top=0;
cin>>m>>n>>seed;
for(int i=1;i<=m;i++)a[i].ac=a[i].rib=0,insert(a[i]);
int u,v;
for(int i=1;i<=n;i++)
{
u=randNum(seed,last,m);
v=randNum(seed,last,m);
del(a[u]);
++a[u].ac;
a[u].rib+=v;
insert(a[u]);
last=ask_val(a[u]);
printf("%lld\n",last);
}
}
}