#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int tot;
int head[N],to[N*2],next1[N*2];
void lian(int x,int y)
{
    to[++tot]=y;
    next1[tot]=head[x];
    head[x]=tot;
}
int d[N],k;
struct qw{
    int a,b,c,d;
}e[N];
struct er{
    int a,b;
}jie[N];
void dfs(int x,int fa)
{
    jie[x].a=x,jie[x].b=0;
    for(int i=head[x];i;i=next1[i])
    {
        int v=to[i];
        if(v==fa) continue;
        d[x]++;
        dfs(v,x);
    }
    if(d[x]==0) return;
    int v1=-1;
    for(int i=head[x];i;i=next1[i])
    {
        int v=to[i];
        if(v==fa) continue;
        if(jie[v].b==0)
        {
            if(v1==-1) jie[x].a=jie[v].a;
            else if(jie[x].b==0) jie[x].b=jie[v].a;
            else e[++k]=(qw){v,x,v,jie[x].a},jie[x].a=jie[v].a;
            v1=0;
            
        }
    }
    if(v1==-1)
    {
        for(int i=head[x];i;i=next1[i])
        {
            int v=to[i];
            if(v==fa) continue;
            v1=v;
            e[++k]=(qw){v,x,x,jie[v].a};
            jie[x].a=jie[v].b;
            break;
        }
    }
    for(int i=head[x];i;i=next1[i])
    {
        int v=to[i];
        if(v==fa||jie[v].b==0||v==v1) continue;
        if(jie[v].a&&jie[v].b) e[++k]=(qw){v,x,jie[v].a,jie[x].a},jie[x].a=jie[v].b;
        else e[++k]=(qw){v,x,jie[x].a,v},jie[x].a=jie[v].a;
    }
}
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n;
        cin>>n;
        int x,y;
        for(int i=1;i<=n-1;i++)
        {
            scanf("%d %d",&x,&y);
            lian(x,y),lian(y,x);
        }
        k=0;
        dfs(1,0);
        printf("%d\n",k);
        for(int i=1;i<=k;i++)
        printf("%d %d %d %d\n",e[i].a,e[i].b,e[i].c,e[i].d);
        tot=0;
        for(int i=1;i<=n;i++) head[i]=d[i]=0;
    }
    return 0;
}
