#include <iostream>#include <stdio.h>#include <string.h>#include <stack>#include <queue>#include <map>#include <set>#include <vector>#include <math.h>#include <algorithm>using namespace std;#define ls 2*i#define rs 2*i+1#define up(i,x,y) for(i=x;i<=y;i++)#define down(i,x,y) for(i=x;i>=y;i--)#define mem(a,x) memset(a,x,sizeof(a))#define w(a) while(a)#define LL long longconst double pi = acos(-1.0);#define Len 200005#define mod 998244353const LL inf = 1<<30;int t,n;struct node{ int x,y,id;} a[Len];int to[Len],ans[Len][2],len;int now[Len],ori[Len];int cmp(node a,node b){ if(a.y == b.y) return a.x<b.x; return a.y>b.y;}int main(){ int i,j,k,x,y; scanf("%d",&t); w(t--) { scanf("%d",&n); up(i,1,2*n) { scanf("%d%d",&a[i].x,&a[i].y); a[i].id = i; } mem(to,0); up(i,1,n) { scanf("%d%d",&x,&y); to[x] = y; to[y] = x; } len = 0; sort(a+1,a+1+2*n,cmp); up(i,1,2*n) { now[i] = a[i].id; ori[a[i].id] = i; } len = 0; up(i,1,n) { int l = 2*i-1; int r = 2*i; if(to[now[l]]==now[r]) continue; else { ans[len][0] = now[r]; ans[len][1] = to[now[l]]; len++; ori[now[r]] = ori[to[now[l]]]; now[ori[to[now[l]]]]=now[r]; ori[to[now[l]]]=r; } } printf("%dn",len); up(i,0,len-1) printf("%d %dn",ans[i][0],ans[i][1]); } return 0;}