#include #include #include #include #include #include using namespace std; #define N 30050 struct Q { int r,idx; Q(int _r=0,int _idx=0):r(_r),idx(_idx){} }; vectorque[N]; vectoredge[N]; int fa[N][200],scc[200],rr[200]; int ta[N],first[N],ans[N]; int n,m,tot,every; int find(int i,int pos) { return fa[i][pos]==i?i:fa[i][pos]=find(fa[i][pos],pos); } void init() { for(int i=0;i<=n;++i) edge[i].clear(),que[i].clear(); memset(scc,0,sizeof(scc)); every=tot=sqrt(n*1.0); if(n*n!=tot) tot++; for(int i=0;;++i) { rr[i]=i*every; if(i*every>=n) break; } for(int i=0;i<=tot;++i) for(int j=0;j<=n;++j) fa[j][i]=j; memset(first,-1,sizeof(first)); } int main () { int T;scanf("%d",&T); for(int kk=1;kk<=T;++kk) { scanf("%d%d",&n,&m); init(); for(int i=1,u,v;i<=m;++i) { scanf("%d%d",&u,&v); if(u==v) continue; edge[u].push_back(v); edge[v].push_back(u); } int q;scanf("%d",&q); for(int i=1,u,v;i<=q;++i) { scanf("%d%d",&u,&v); que[u].push_back(Q(v,i)); } int run_clock=0; for(int u=n;u>=1;--u) { for(int j=1;j<=tot;++j) { if(u>rr[j]) continue; scc[j]++; int inc=0; for(int i=0;i