RT,5pts,AC on #1,chain3 没过。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#define mp make_pair
// #define debug1(x) cerr<<#x<<"="<<x<<" "
// #define debug2(x) cerr<<#x<<"="<<x<<"\n"
const int inf=1e16,maxn=2e5+10;
namespace ARIS2_0{
int n,k,ask,len[maxn];
vector<pii>v[maxn];
vector<int>num[maxn];
bool ans[110][maxn];
void clear(){
for(int i=0;i<maxn;i++)v[i].clear(),num[i].clear();
memset(ans,0,sizeof(ans));
}
struct node{int id,w,cnt;};
queue<node>q;
void bfs(){
for(int id=1;id<=n;id++){
int lst=1;
for(int i=1;i<=len[id];i++){
if(num[id][i]==1){
for(int j=max(lst,i+1);j<=min(i+k-1,len[id]);j++){
q.push(node{id,j,1});
ans[1][num[id][j]]=1;
}
lst=i+k;
}
}
}
while(q.size()){
int id=q.front().id,w=q.front().w,cnt=q.front().cnt;
q.pop();
// debug1(id);debug1(w);debug2(cnt);
if(cnt==100)continue;
for(int i=0;i<v[num[id][w]].size();i++){
int nid=v[num[id][w]][i].fi,nw=v[num[id][w]][i].se;
if(nid!=id){
for(int j=nw+1;j<=min(len[nid],nw+k-1);j++){
if(!ans[cnt+1][num[nid][j]]){
ans[cnt+1][num[nid][j]]=1;
q.push(node{nid,j,cnt+1});
/*if(cnt+1==1 and num[nid][j]==1){
debug1(cnt);debug2(num[id][w]);
}*/
}
}
}
}
}
}
void solve(){
clear();
cin>>n>>k>>ask;
for(int i=1;i<=n;i++){
cin>>len[i];
num[i].resize(len[i]+1);
for(int j=1;j<=len[i];j++){
cin>>num[i][j];
v[num[i][j]].push_back({i,j});
}
}
bfs();
while(ask--){
int r,c;cin>>r>>c;
cout<<ans[r][c]<<"\n";
}
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int t;cin>>t;
while(t--)ARIS2_0::solve();
return 0;
}