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.
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define ff first
#define ss second

const int mod=1e9+7;

const int N=1e5+5;

vector<int> g[N];
vector<pii> ad, re;
int n;
int t;

struct pt{
    int a,b,c,d;
};

int dfs(int u, int p){
    //cout<<"u,p="<<u<<' '<<p<<'\n';
    int cnt=0;
    int leaf1=0, leaf2=0;

    int sz=g[u].size();
    for(int v:g[u]){
        if(v==p) continue;
        int tmp=dfs(v,u);
        //if(v==30) cout<<"u,v,tmp="<<u<<' '<<v<<' '<<tmp<<'\n';
        if(tmp==u) continue;

        if(leaf1==0) leaf1=tmp;
        else if(leaf2==0){
            leaf2=tmp;
            ad.push_back({leaf1,leaf2});
            if(u>1) re.push_back({p,u});
        }

        else{
            re.push_back({u,v});
            //cout<<"v,leaf="<<v<<' '<<tmp<<'\n';
            ad.push_back({v,tmp});
        }
    }

    if(leaf1==0 && leaf2==0) return u;
    else if(leaf1 && leaf2) return p;
    return leaf1;
}

void solve(){
    cin>>n;
    for(int i=1; i<=n; ++i) g[i].clear();
    ad.clear();
    re.clear();

    for(int i=1; i<n; ++i){
        int u,v; cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }

    int tmp = dfs(1,0);
    ad.push_back({1,tmp});
    //cout<<"here="<<ad.size()<<' '<<re.size()<<'\n';
    //cout<<"thee\n";
    //for(int i=0; i<re.size()+1; ++i) cout<<ad[i].ff<<' '<<ad[i].ss<<'\n';
    cout<<re.size()<<'\n';
    for(int i=0; i<re.size(); ++i){
        cout<<re[i].ff<<' '<<re[i].ss<<' ';
        cout<<ad[i].ss<<' '<<ad[i+1].ff<<'\n';
    }
}

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin>>t;
    while(t--){
        solve();
    }
}
