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<cstdio>
#include<vector>
using namespace std;
int T,N;
vector<vector<int> >G;
vector<pair<pair<int,int>,pair<int,int> > >del;
int dfs(int u,int p)
{
	int ch=0;
	int to=u;
	for(int v:G[u])if(v!=p)
	{
		int x=dfs(v,u);
		if(x<0)continue;
		ch++;
		if(ch==1)to=x;
		else if(ch==2)
		{
			del.push_back(make_pair(make_pair(p,u),make_pair(to,x)));
			to=-1;
		}
		else
		{
			del.push_back(make_pair(make_pair(u,v),make_pair(v,x)));
		}
	}
	return to;
}
int main()
{
	scanf("%d",&T);
	for(;T--;)
	{
		scanf("%d",&N);
		G.clear();
		G.resize(N);
		del.clear();
		for(int i=1;i<N;i++)
		{
			int a,b;scanf("%d%d",&a,&b);
			a--,b--;
			G[a].push_back(b);
			G[b].push_back(a);
		}
		int root=0;
		while(G[root].size()>1)root++;
		int to=dfs(root,-1);
		printf("%d\n",del.size());
		for(pair<pair<int,int>,pair<int,int> >e:del)
		{
			printf("%d %d %d %d\n",e.first.first+1,e.first.second+1,to+1,e.second.first+1);
			to=e.second.second;
		}
	}
}
