#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define F(i,j,k) for (signed i=signed(j);i<=signed(k);i++)
#define endl '\n'
typedef unsigned int ui ;
struct node{
ui ac,tim,id;
};
bool operator >(node n1,node n2){
if(n1.ac!=n2.ac) return n1.ac>n2.ac;
if(n1.tim!=n2.tim) return n1.tim<n2.tim;
return n1.id>n2.id;
}
typedef tree<node,null_type,greater<node>,rb_tree_tag,
tree_order_statistics_node_update> std_tree;
std_tree t;
ui n,m,last=7,T;
ui seed;
ui randNum( ui& seed , ui last , const ui m){
seed = seed * 17 + last ; return seed % m + 1;
}
node nds[(int)1e5+5];
void solve(){
t=tree<node,null_type,greater<node>,rb_tree_tag,tree_order_statistics_node_update>();
F(i,1,n){
ui ria=randNum(seed,last,m),rib=randNum(seed,last,m);
if(nds[ria].id!=0) t.erase(nds[ria]);
nds[ria]={nds[ria].ac+1,nds[ria].tim+rib-1,(ui)i};
cout<<(last=t.order_of_key(nds[ria]))<<endl;
nds[ria].tim++;
t.insert(nds[ria]);
}
}
main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>T;
while(T--){
F(i,1,1e5+4) nds[i]={0,0,0};
cin>>m>>n>>seed,solve();
}
return 0;
}