Problem: Nastia has an unweighted tree with n vertices and wants to play with it!

The girl will perform the following operation with her tree, as long as she needs:

  1. Remove any existing edge. 
  2. Add an edge between any pair of vertices. 



What is the minimum number of operations Nastia needs to get a bamboo from a tree? A bamboo is a tree in which no node has a degree greater than 2.

Input

The first line contains a single integer t (1 ≤ t ≤ 10 000) — the number of test cases.

The first line of each test case contains a single integer n (2 ≤ n ≤ 10^5) — the number of vertices in the tree.

Next n - 1 lines of each test cases describe the edges of the tree in form a_i, b_i (1 ≤ a_i, b_i ≤ n, a_i ≠ b_i).

It's guaranteed the given graph is a tree and the sum of n in one test doesn't exceed 2 ⋅ 10^5.

Output

For each test case in the first line print a single integer k — the minimum number of operations required to obtain a bamboo from the initial tree.

In the next k lines print 4 integers x_1, y_1, x_2, y_2 (1 ≤ x_1, y_1, x_2, y_{2} ≤ n, x_1 ≠ y_1, x_2 ≠ y_2) — this way you remove the edge (x_1, y_1) and add an undirected edge (x_2, y_2).

Note that the edge (x_1, y_1) must be present in the graph at the moment of removing.

Example

Input


2
7
1 2
1 3
2 4
2 5
3 6
3 7
4
1 2
1 3
3 4


Output


2
2 5 6 7
3 6 4 5
0

Note

Note the graph can be unconnected after a certain operation.

Consider the first test case of the example: 

<image> The red edges are removed, and the green ones are added.

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define pii pair<int, int>
#define pll pair<ll, ll>
#define vi vector<int>
#define vll vector<ll>
#define vpii vector<pair<int,int>>
#define vpll vector<pair<ll,ll>>
#define fr(i,k,n) for (int i = k; i < n; ++i)
#define fri(i,k,n) for (int i = k; i >= n; --i)
#define pb push_back
#define mp make_pair
#define all(arr) arr.begin(),arr.end()
#define ff first
#define ss second
#define endl '\n'

const double pi=3.1415926535897932384626433832795;
const int inf=1e9;
const ll inf2=1e18;
const int mod=1e9+7;

void boost(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
}

const int N=1e5+5;
set<int> adj[N];
vpii rem,add;
vector<bool> vis(N,false);
int e1,e2;

void dfs(int u,int p){
    vi temp;
    for(auto v: adj[u])
        if(v!=p)
            temp.pb(v);
    for(auto v: temp){
        if(v!=p){
            dfs(v,u);
        }
    }
    if(int(adj[u].size())>2){
        if(p!=0 && (int)(adj[p].size())>2){
            adj[p].erase(u);
            adj[u].erase(p);
            rem.pb({p,u});
        }
        temp.clear();
        for(auto v: adj[u])
            if(v!=p)
                temp.pb(v);
        for(auto v: temp){
            if(int(adj[u].size())<=2)
                break;
            if(v==p)
                continue;
            adj[v].erase(u);
            adj[u].erase(v);
            rem.pb({v,u});
        }
    }
}

void dfs2(int u,int p){
    vis[u]=true;
    if(int(adj[u].size())<=1){
        if(e1!=-1)
            e2=u;
        else
            e1=e2=u;
    }
    for(auto v: adj[u]){
        if(v!=p)
            dfs2(v,u);
    }
}

void solve(){
    int n;
    cin>>n;
    int u,v;
    fr(i,0,n-1){
        cin>>u>>v;
        adj[u].insert(v);
        adj[v].insert(u);
    }
    dfs(1,0);
    int r=-1;
    fr(i,1,n+1){
        if(!vis[i]){
            e1=e2=-1;
            dfs2(i,0);
            if(r==-1){
                r=e1;
                continue;
            }
            add.pb({e1,r});
            r=e2;
        }
    }
    int m=add.size();
    cout<<m<<endl;
    for(int i=0;i<m;i++){
        cout<<rem[i].ff<<" "<<rem[i].ss<<" "<<add[i].ff<<" "<<add[i].ss<<endl;
    }
    fr(i,1,n+1){
        adj[i].clear();
        vis[i]=false;
    }
    rem.clear();
    add.clear();
    return;
}

int main()
{
    boost();
    
    int tc=1;
    cin>>tc;
    while(tc--)
        solve();
    return 0;
}