#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 4e5 + 5, M = 8e5 + 5;
int n, ver[M], nxt[M], edge[M], h[N], tot, p[3], dis[3][N], mx, f[N], opt[N], cnt, mxd[3][N];
inline void add(int x, int y, int z) {ver[++tot] = y, edge[tot] = z, nxt[tot] = h[x], h[x] = tot;}
void dfs1(int u, int fa, int k, int len) {
if(len > mx) mx = len, p[k] = u;
for(int i = h[u]; i; i = nxt[i]) {
int v = ver[i], w = edge[i];
if(v == fa) continue;
dfs1(v, u, k, len + w);
}
}
void dfs2(int u, int fa, int k) {
mxd[k][u] = dis[k][u];
for(int i = h[u]; i; i = nxt[i]) {
int v = ver[i], w = edge[i];
if(v == fa) continue;
dis[k][v] = dis[k][u] + w;
if(k == 0) f[v] = u;
dfs2(v, u, k);
mxd[k][u] = max(mxd[k][u], mxd[k][v]);
}
}
signed main() {
scanf("%lld", &n);
for(int i = 1, x, y, z; i < n; i++) {
scanf("%lld%lld%lld", &x, &y, &z);
add(x, y, z), add(y, x, z);
}
dfs1(1, 0, 0, 0); dfs1(p[0], 0, 1, 0);
dfs2(p[0], 0, 0); dfs2(p[1], 0, 1);
printf("%lld\n", mx);
int x = p[1];
while(x != p[0]) {
opt[++cnt] = x;
x = f[x];
}
opt[++cnt] = p[0];
// for(int i = 1; i <= cnt; i++) printf("%d ", opt[i]); puts("");
int j1 = 1, j2 = cnt;
for(int i = 1; i <= cnt; i++) {
bool ok = 0;
for(int j = h[opt[i]]; j; j = nxt[j]) {
if(ver[j] != opt[i + 1] && ver[j] != opt[i - 1]) {
if(mxd[1][ver[j]] - dis[1][opt[i]] == dis[1][opt[i]]) {
ok = 1; break;
}
}
}
if(ok) j1 = i;
}
for(int i = cnt; i >= 1; i--) {
bool ok = 0;
for(int j = h[opt[i]]; j; j = nxt[j]) {
if(ver[j] != opt[i + 1] && ver[j] != opt[i - 1]) {
if(mxd[0][ver[j]] - dis[0][opt[i]] == dis[0][opt[i]]) {
ok = 1; break;
}
}
}
if(ok) j2 = i;
}
// printf("%lld %lld\n", j1, j2);
printf("%lld\n", max(cnt - 1 - (j1 - 1) - (cnt - j2), 0ll));
return 0;
}
数组开大了试了一下也没用