#include <bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
const int N = 5e3 + 5;
int n, d1[N], d2[N], p, q;
vector<pair<int, int> > g[N];
void dfs(int u, int fa, int *d, int x) {
for(auto [v, w] : g[u]) {
if(v == fa || v == x) continue;
d[v] = d[u] + w;
dfs(v, u, d, x);
}
}
int solve(int x, int y, int k) {
memset(d1, 0, sizeof(d1));
memset(d2, 0, sizeof(d2));
dfs(x, 0, d1, y);
p = max_element(d1 + 1, d1 + n + 1) - d1;
memset(d1, 0, sizeof(d1));
dfs(p, 0, d1, y);
q = max_element(d1 + 1, d1 + n + 1) - d1;
int zhi1 = *max_element(d1 + 1, d1 + n + 1);
dfs(q, 0, d2, y);
int mina = 2e9;
for(int i = 1; i <= n; i++)
if(d1[i] || d2[i])
mina = min(mina, max(d1[i], d2[i]));
memset(d1, 0, sizeof(d1));
memset(d2, 0, sizeof(d2));
dfs(y, 0, d1, x);
p = max_element(d1 + 1, d1 + n + 1) - d1;
memset(d1, 0, sizeof(d1));
dfs(p, 0, d1, x);
q = max_element(d1 + 1, d1 + n + 1) - d1;
int zhi2 = *max_element(d1 + 1, d1 + n + 1);
dfs(q, 0, d2, x);
int minb = 2e9;
for(int i = 1; i <= n; i++)
if(d1[i] || d2[i])
minb = min(minb, max(d1[i], d2[i]));
mina = mina == 2e9 ? 0 : mina;
minb = minb == 2e9 ? 0 : minb;
return max({mina + k + minb, zhi1, zhi2});
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for(int i = 1, u, v, w; i < n; i++) {
cin >> u >> v >> w;
g[u].push_back({v, w});
g[v].push_back({u, w});
}
int ans = 2e9;
for(int i = 1; i <= n; i++) {
for(auto [j, w] : g[i]) {
ans = min(ans, solve(i, j, w));
}
}
cout << ans;
return 0;
}