#include <bits/stdc++.h>
#define mod 1000000007
#define DEBUG(x) cout << '>' << #x << ':' << x << endl;
#define REP(i, n) for (int i = 0; i < (n); i++)
#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
#define FORD(i, a, b) for (int i = (a); i >= (b); i--)
#define pb push_back
#define eb emplace_back
#define sv() \
int t; \
scanf("%d", &t); \
while (t--)
inline bool EQ(double a, double b)
{
return fabs(a - b) < 1e-9;
}
const int INF = 1 << 29;
typedef long long ll;
inline int two(int n)
{
return 1 << n;
}
inline int test(int n, int b)
{
return (n >> b) & 1;
}
inline void set_bit(int &n, int b)
{
n |= two(b);
}
inline void unset_bit(int &n, int b)
{
n &= ~two(b);
}
inline int last_bit(int n)
{
return n & (-n);
}
inline int ones(int n)
{
int res = 0;
while (n && ++res)
n -= n & (-n);
return res;
}
template <class T>
void chmax(T &a, const T &b)
{
a = max(a, b);
}
template <class T>
void chmin(T &a, const T &b)
{
a = min(a, b);
}
ll gcd(ll a, ll b)
{
if (a == 0 || b == 0)
return 0;
if (a == b)
return a;
if (a > b)
return gcd(a - b, b);
return gcd(a, b - a);
}
ll lcm(ll a, ll b)
{
return (a * b) / gcd(a, b);
}
ll max(ll a, ll b)
{
if (a > b)
return a;
return b;
}
ll power(ll x, ll y)
{
ll res = 1;
while (y > 0)
{
if (y & 1)
res = res * x;
y = y >> 1;
x = x * x;
}
return res;
}
ll powermod(ll x, ll y)
{
ll res = 1;
x = x % mod;
while (y > 0)
{
if (y & 1)
res = (res * x) % mod;
y = y >> 1;
x = (x * x) % mod;
}
return res;
}
ll mulmod(ll a, ll b)
{
ll res = 0;
a %= mod;
while (b)
{
if (b & 1)
res = (res + a) % mod;
a = (2 * a) % mod;
b >>= 1;
}
return res;
}
bool isPrime(ll n)
{
if (n <= 1)
return false;
if (n <= 3)
return true;
if (n % 2 == 0 || n % 3 == 0)
return false;
for (int i = 5; i * i <= n; i += 6)
{
if ((n % i == 0) || (n % (i + 2) == 0))
return false;
}
return true;
}
long double dist(ll x1, ll y1, ll x2, ll y2)
{
return (long double)sqrt((long double)((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)));
}
ll squaredist(ll x1, ll y1, ll x2, ll y2)
{
return ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
ll nCr(ll n, ll r)
{
if (r == 0)
return 1;
return (n * nCr(n - 1, r - 1)) / r;
}
ll countDivisors(ll n)
{
ll cnt = 0;
for (int i = 1; i <= sqrt(n); i++)
{
if (n % i == 0)
{
if (n / i == i)
cnt++;
else
cnt = cnt + 2;
}
}
return cnt;
}
ll modulo(ll a, ll b)
{
ll r = a % b;
return r < 0 ? r + b : r;
}
#define int long long
using namespace std;
class Graph
{
int n;
vector<vector<int>> adj;
public:
vector<bool> used;
vector<int> d, p;
int mx;
Graph(int n);
void addEdge(int v, int w);
int BFS(int s);
void shortestPath(int u);
};
Graph::Graph(int n)
{
this->n = n;
adj.resize(n);
used.resize(n);
d.resize(n);
p.resize(n);
mx = INT_MIN;
for (int i = 0; i < n; i++)
{
adj[i].resize(n);
}
}
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w);
adj[w].push_back(v);
}
int Graph::BFS(int s)
{
queue<int> q;
q.push(s);
used[s] = true;
p[s] = -1;
int farthest = s;
while (!q.empty())
{
int v = q.front();
q.pop();
for (int u : adj[v])
{
if (!used[u])
{
used[u] = true;
q.push(u);
d[u] = d[v] + 1;
farthest = u;
p[u] = v;
mx = d[u];
}
}
}
return farthest;
}
int32_t main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
Graph g(n);
REP(i, n - 1)
{
int a, b;
cin >> a >> b;
g.addEdge(a, b);
}
int u = g.BFS(0);
REP(i, n)
{
g.used[i] = false;
g.p[i] = 0;
g.d[i] = 0;
}
int v = g.BFS(u);
// REP(i, n)
// {
// mx = max(mx, g.d[i]);
// }
cout << (g.mx + 1) / 2 << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbW9kIDEwMDAwMDAwMDcKI2RlZmluZSBERUJVRyh4KSBjb3V0IDw8ICc+JyA8PCAjeCA8PCAnOicgPDwgeCA8PCBlbmRsOwojZGVmaW5lIFJFUChpLCBuKSBmb3IgKGludCBpID0gMDsgaSA8IChuKTsgaSsrKQojZGVmaW5lIEZPUihpLCBhLCBiKSBmb3IgKGludCBpID0gKGEpOyBpIDw9IChiKTsgaSsrKQojZGVmaW5lIEZPUkQoaSwgYSwgYikgZm9yIChpbnQgaSA9IChhKTsgaSA+PSAoYik7IGktLSkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBlYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBzdigpICAgICAgICAgXAogICAgaW50IHQ7ICAgICAgICAgICBcCiAgICBzY2FuZigiJWQiLCAmdCk7IFwKICAgIHdoaWxlICh0LS0pCmlubGluZSBib29sIEVRKGRvdWJsZSBhLCBkb3VibGUgYikKewogICAgcmV0dXJuIGZhYnMoYSAtIGIpIDwgMWUtOTsKfQpjb25zdCBpbnQgSU5GID0gMSA8PCAyOTsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmlubGluZSBpbnQgdHdvKGludCBuKQp7CiAgICByZXR1cm4gMSA8PCBuOwp9CmlubGluZSBpbnQgdGVzdChpbnQgbiwgaW50IGIpCnsKICAgIHJldHVybiAobiA+PiBiKSAmIDE7Cn0KaW5saW5lIHZvaWQgc2V0X2JpdChpbnQgJm4sIGludCBiKQp7CiAgICBuIHw9IHR3byhiKTsKfQppbmxpbmUgdm9pZCB1bnNldF9iaXQoaW50ICZuLCBpbnQgYikKewogICAgbiAmPSB+dHdvKGIpOwp9CmlubGluZSBpbnQgbGFzdF9iaXQoaW50IG4pCnsKICAgIHJldHVybiBuICYgKC1uKTsKfQppbmxpbmUgaW50IG9uZXMoaW50IG4pCnsKICAgIGludCByZXMgPSAwOwogICAgd2hpbGUgKG4gJiYgKytyZXMpCiAgICAgICAgbiAtPSBuICYgKC1uKTsKICAgIHJldHVybiByZXM7Cn0KdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgY2htYXgoVCAmYSwgY29uc3QgVCAmYikKewogICAgYSA9IG1heChhLCBiKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kdm9pZCBjaG1pbihUICZhLCBjb25zdCBUICZiKQp7CiAgICBhID0gbWluKGEsIGIpOwp9CmxsIGdjZChsbCBhLCBsbCBiKQp7CiAgICBpZiAoYSA9PSAwIHx8IGIgPT0gMCkKICAgICAgICByZXR1cm4gMDsKICAgIGlmIChhID09IGIpCiAgICAgICAgcmV0dXJuIGE7CiAgICBpZiAoYSA+IGIpCiAgICAgICAgcmV0dXJuIGdjZChhIC0gYiwgYik7CiAgICByZXR1cm4gZ2NkKGEsIGIgLSBhKTsKfQpsbCBsY20obGwgYSwgbGwgYikKewogICAgcmV0dXJuIChhICogYikgLyBnY2QoYSwgYik7Cn0KbGwgbWF4KGxsIGEsIGxsIGIpCnsKICAgIGlmIChhID4gYikKICAgICAgICByZXR1cm4gYTsKICAgIHJldHVybiBiOwp9CmxsIHBvd2VyKGxsIHgsIGxsIHkpCnsKICAgIGxsIHJlcyA9IDE7CiAgICB3aGlsZSAoeSA+IDApCiAgICB7CiAgICAgICAgaWYgKHkgJiAxKQogICAgICAgICAgICByZXMgPSByZXMgKiB4OwogICAgICAgIHkgPSB5ID4+IDE7CiAgICAgICAgeCA9IHggKiB4OwogICAgfQogICAgcmV0dXJuIHJlczsKfQpsbCBwb3dlcm1vZChsbCB4LCBsbCB5KQp7CiAgICBsbCByZXMgPSAxOwogICAgeCA9IHggJSBtb2Q7CiAgICB3aGlsZSAoeSA+IDApCiAgICB7CiAgICAgICAgaWYgKHkgJiAxKQogICAgICAgICAgICByZXMgPSAocmVzICogeCkgJSBtb2Q7CiAgICAgICAgeSA9IHkgPj4gMTsKICAgICAgICB4ID0gKHggKiB4KSAlIG1vZDsKICAgIH0KICAgIHJldHVybiByZXM7Cn0KbGwgbXVsbW9kKGxsIGEsIGxsIGIpCnsKICAgIGxsIHJlcyA9IDA7CiAgICBhICU9IG1vZDsKICAgIHdoaWxlIChiKQogICAgewogICAgICAgIGlmIChiICYgMSkKICAgICAgICAgICAgcmVzID0gKHJlcyArIGEpICUgbW9kOwogICAgICAgIGEgPSAoMiAqIGEpICUgbW9kOwogICAgICAgIGIgPj49IDE7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CmJvb2wgaXNQcmltZShsbCBuKQp7CiAgICBpZiAobiA8PSAxKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChuIDw9IDMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAobiAlIDIgPT0gMCB8fCBuICUgMyA9PSAwKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSA1OyBpICogaSA8PSBuOyBpICs9IDYpCiAgICB7CiAgICAgICAgaWYgKChuICUgaSA9PSAwKSB8fCAobiAlIChpICsgMikgPT0gMCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9CmxvbmcgZG91YmxlIGRpc3QobGwgeDEsIGxsIHkxLCBsbCB4MiwgbGwgeTIpCnsKICAgIHJldHVybiAobG9uZyBkb3VibGUpc3FydCgobG9uZyBkb3VibGUpKCh4MSAtIHgyKSAqICh4MSAtIHgyKSArICh5MSAtIHkyKSAqICh5MSAtIHkyKSkpOwp9CmxsIHNxdWFyZWRpc3QobGwgeDEsIGxsIHkxLCBsbCB4MiwgbGwgeTIpCnsKICAgIHJldHVybiAoKHgxIC0geDIpICogKHgxIC0geDIpICsgKHkxIC0geTIpICogKHkxIC0geTIpKTsKfQpsbCBuQ3IobGwgbiwgbGwgcikKewogICAgaWYgKHIgPT0gMCkKICAgICAgICByZXR1cm4gMTsKICAgIHJldHVybiAobiAqIG5DcihuIC0gMSwgciAtIDEpKSAvIHI7Cn0KbGwgY291bnREaXZpc29ycyhsbCBuKQp7CiAgICBsbCBjbnQgPSAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gc3FydChuKTsgaSsrKQogICAgewogICAgICAgIGlmIChuICUgaSA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKG4gLyBpID09IGkpCiAgICAgICAgICAgICAgICBjbnQrKzsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgY250ID0gY250ICsgMjsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gY250Owp9CmxsIG1vZHVsbyhsbCBhLCBsbCBiKQp7CiAgICBsbCByID0gYSAlIGI7CiAgICByZXR1cm4gciA8IDAgPyByICsgYiA6IHI7Cn0KI2RlZmluZSBpbnQgbG9uZyBsb25nCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNsYXNzIEdyYXBoCnsKICAgIGludCBuOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGo7CgpwdWJsaWM6CiAgICB2ZWN0b3I8Ym9vbD4gdXNlZDsKICAgIHZlY3RvcjxpbnQ+IGQsIHA7CiAgICBpbnQgbXg7CiAgICBHcmFwaChpbnQgbik7CiAgICB2b2lkIGFkZEVkZ2UoaW50IHYsIGludCB3KTsKICAgIGludCBCRlMoaW50IHMpOwogICAgdm9pZCBzaG9ydGVzdFBhdGgoaW50IHUpOwp9OwoKR3JhcGg6OkdyYXBoKGludCBuKQp7CiAgICB0aGlzLT5uID0gbjsKICAgIGFkai5yZXNpemUobik7CiAgICB1c2VkLnJlc2l6ZShuKTsKICAgIGQucmVzaXplKG4pOwogICAgcC5yZXNpemUobik7CiAgICBteCA9IElOVF9NSU47CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBhZGpbaV0ucmVzaXplKG4pOwogICAgfQp9Cgp2b2lkIEdyYXBoOjphZGRFZGdlKGludCB2LCBpbnQgdykKewogICAgYWRqW3ZdLnB1c2hfYmFjayh3KTsKICAgIGFkalt3XS5wdXNoX2JhY2sodik7Cn0KCmludCBHcmFwaDo6QkZTKGludCBzKQp7CiAgICBxdWV1ZTxpbnQ+IHE7CiAgICBxLnB1c2gocyk7CiAgICB1c2VkW3NdID0gdHJ1ZTsKICAgIHBbc10gPSAtMTsKICAgIGludCBmYXJ0aGVzdCA9IHM7CiAgICB3aGlsZSAoIXEuZW1wdHkoKSkKICAgIHsKICAgICAgICBpbnQgdiA9IHEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwogICAgICAgIGZvciAoaW50IHUgOiBhZGpbdl0pCiAgICAgICAgewogICAgICAgICAgICBpZiAoIXVzZWRbdV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHVzZWRbdV0gPSB0cnVlOwogICAgICAgICAgICAgICAgcS5wdXNoKHUpOwogICAgICAgICAgICAgICAgZFt1XSA9IGRbdl0gKyAxOwogICAgICAgICAgICAgICAgZmFydGhlc3QgPSB1OwogICAgICAgICAgICAgICAgcFt1XSA9IHY7CiAgICAgICAgICAgICAgICBteCA9IGRbdV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFydGhlc3Q7Cn0KCmludDMyX3QgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiAgICBpbnQgdDsKICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkKICAgIHsKICAgICAgICBpbnQgbjsKICAgICAgICBjaW4gPj4gbjsKICAgICAgICBHcmFwaCBnKG4pOwogICAgICAgIFJFUChpLCBuIC0gMSkKICAgICAgICB7CiAgICAgICAgICAgIGludCBhLCBiOwogICAgICAgICAgICBjaW4gPj4gYSA+PiBiOwogICAgICAgICAgICBnLmFkZEVkZ2UoYSwgYik7CiAgICAgICAgfQogICAgICAgIGludCB1ID0gZy5CRlMoMCk7CiAgICAgICAgUkVQKGksIG4pCiAgICAgICAgewogICAgICAgICAgICBnLnVzZWRbaV0gPSBmYWxzZTsKICAgICAgICAgICAgZy5wW2ldID0gMDsKICAgICAgICAgICAgZy5kW2ldID0gMDsKICAgICAgICB9CiAgICAgICAgaW50IHYgPSBnLkJGUyh1KTsKICAgICAgICAvLyBSRVAoaSwgbikKICAgICAgICAvLyB7CiAgICAgICAgLy8gICAgIG14ID0gbWF4KG14LCBnLmRbaV0pOwogICAgICAgIC8vIH0KICAgICAgICBjb3V0IDw8IChnLm14ICsgMSkgLyAyIDw8ICJcbiI7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==