#include <bits/stdc++.h>
#define mod 10007
using namespace std;
int t, n, u, v, dp1[110000], dp2[110000], ways1[110000], ways2[110000];
vector< vector<int> > graph(110000);
void solve(int index, int par)
{
dp1[index] = 1;
dp2[index] = 0;
ways1[index] = ways2[index] = 1;
for (int i = 0; i < graph[index].size(); i++)
{
int node = graph[index][i];
if (node == par)
continue;
solve(node, index);
if (dp1[node] == dp2[node])
{
dp1[index] += dp1[node];
dp2[index] += dp1[node];
ways1[index] *= (ways1[node]+ways2[node]);
ways2[index] *= ways1[node];
ways1[index] %= mod;
ways2[index] %= mod;
}
else
{
dp1[index] += min(dp1[node], dp2[node]);
dp2[index] += dp1[node];
ways1[index] *= (min(dp1[node], dp2[node]) == dp1[node] ? ways1[node] : ways2[node]);
ways2[index] *= ways1[node];
ways1[index] %= mod;
ways2[index] %= mod;
}
}
}
int main()
{
ios::sync_with_stdio(false); cin.tie(0);
cin>>t;
for (int i = 0; i < t; i++)
{
cin>>n;
for (int j = 0; j <= n; j++)
{
dp1[j] = dp2[j] = n+1;
graph[j].clear();
ways1[j] = ways2[j] = 1;
}
for (int j = 0; j < n-1; j++)
{
cin>>u>>v;
graph[u].push_back(v);
graph[v].push_back(u);
}
solve(1, -1);
if (dp1[1] == dp2[1])
{
cout<<dp1[1]<<" "<<(ways1[1]+ways2[1])%mod<<"\n";
}
else if (dp1[1] < dp2[1])
{
cout<<dp1[1]<<" "<<ways1[1]<<"\n";
}
else
{
cout<<dp2[1]<<" "<<ways2[1]<<"\n";
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbW9kIDEwMDA3CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCB0LCBuLCB1LCB2LCBkcDFbMTEwMDAwXSwgZHAyWzExMDAwMF0sIHdheXMxWzExMDAwMF0sIHdheXMyWzExMDAwMF07CnZlY3RvcjwgdmVjdG9yPGludD4gPiBncmFwaCgxMTAwMDApOwoKdm9pZCBzb2x2ZShpbnQgaW5kZXgsIGludCBwYXIpCnsKCWRwMVtpbmRleF0gPSAxOwoJZHAyW2luZGV4XSA9IDA7Cgl3YXlzMVtpbmRleF0gPSB3YXlzMltpbmRleF0gPSAxOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBncmFwaFtpbmRleF0uc2l6ZSgpOyBpKyspCgl7CgkJaW50IG5vZGUgPSBncmFwaFtpbmRleF1baV07CgkJaWYgKG5vZGUgPT0gcGFyKQoJCQljb250aW51ZTsKCQlzb2x2ZShub2RlLCBpbmRleCk7CgkJaWYgKGRwMVtub2RlXSA9PSBkcDJbbm9kZV0pCgkJewoJCQlkcDFbaW5kZXhdICs9IGRwMVtub2RlXTsKCQkJZHAyW2luZGV4XSArPSBkcDFbbm9kZV07CgkJCXdheXMxW2luZGV4XSAqPSAod2F5czFbbm9kZV0rd2F5czJbbm9kZV0pOwoJCQl3YXlzMltpbmRleF0gKj0gd2F5czFbbm9kZV07CgkJCXdheXMxW2luZGV4XSAlPSBtb2Q7CgkJCXdheXMyW2luZGV4XSAlPSBtb2Q7CgkJfQoJCWVsc2UKCQl7CgkJCWRwMVtpbmRleF0gKz0gbWluKGRwMVtub2RlXSwgZHAyW25vZGVdKTsKCQkJZHAyW2luZGV4XSArPSBkcDFbbm9kZV07CgkJCXdheXMxW2luZGV4XSAqPSAobWluKGRwMVtub2RlXSwgZHAyW25vZGVdKSA9PSBkcDFbbm9kZV0gPyB3YXlzMVtub2RlXSA6IHdheXMyW25vZGVdKTsKCQkJd2F5czJbaW5kZXhdICo9IHdheXMxW25vZGVdOwoJCQl3YXlzMVtpbmRleF0gJT0gbW9kOwoJCQl3YXlzMltpbmRleF0gJT0gbW9kOwoJCX0KCX0KfQoKaW50IG1haW4oKQp7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoMCk7CgljaW4+PnQ7Cglmb3IgKGludCBpID0gMDsgaSA8IHQ7IGkrKykKCXsKCQljaW4+Pm47CgkJZm9yIChpbnQgaiA9IDA7IGogPD0gbjsgaisrKQoJCXsKCQkJZHAxW2pdID0gZHAyW2pdID0gbisxOwoJCQlncmFwaFtqXS5jbGVhcigpOwoJCQl3YXlzMVtqXSA9IHdheXMyW2pdID0gMTsKCQl9CgkJZm9yIChpbnQgaiA9IDA7IGogPCBuLTE7IGorKykKCQl7CgkJCWNpbj4+dT4+djsKCQkJZ3JhcGhbdV0ucHVzaF9iYWNrKHYpOwoJCQlncmFwaFt2XS5wdXNoX2JhY2sodSk7CgkJfQoJCXNvbHZlKDEsIC0xKTsKCQlpZiAoZHAxWzFdID09IGRwMlsxXSkKCQl7CgkJCWNvdXQ8PGRwMVsxXTw8IiAiPDwod2F5czFbMV0rd2F5czJbMV0pJW1vZDw8IlxuIjsKCQl9CgkJZWxzZSBpZiAoZHAxWzFdIDwgZHAyWzFdKQoJCXsKCQkJY291dDw8ZHAxWzFdPDwiICI8PHdheXMxWzFdPDwiXG4iOwoJCX0KCQllbHNlCgkJewoJCQljb3V0PDxkcDJbMV08PCIgIjw8d2F5czJbMV08PCJcbiI7CgkJfQoJfQp9