// https://szkopul.edu.pl/problemset/problem/1QaUWE_ePAmitZjgAszOVD1U/site/?key=statement
#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int sizik = 1000 * 1001;
#define ar std::array
#define pr std::pair
#define vec std::vector
typedef long long ll;
typedef vec<vec<int>> _kra;
std::vector<int> kra[sizik];
int dp[sizik], dp2[sizik];
void DFS(int v, int p) {
std::vector<int> local;
for (const auto& u : kra[v]) {
if (u != p) {
DFS(u, v);
local.push_back(dp[u]);
}
}
std::sort(local.begin(), local.end(), std::greater<int>());
dp[v] = std::max(0ll, (int)kra[v].size() - 1);
int sum = kra[v].size(), m = kra[v].size();
if (p != v) m--;
if (local.size() > 0) {
sum += local[0];
dp[v] = std::max(dp[v], local[0] + m - 1);
dp2[v] = std::max(dp2[v], sum - 1);
}
if (local.size() > 1) {
sum += local[1];
dp2[v] = std::max(dp2[v], sum - 2);
}
}
void solve() {
int n;
std::cin >> n;
for (int i = 0; i < n - 1; i++) {
int a, b;
std::cin >> a >> b;
kra[a].push_back(b);
kra[b].push_back(a);
}
DFS(1, 1);
int ans = 0;
for (int i = 1; i <= n; i++) {
ans = std::max(dp2[i], ans);
}
std::cout << ans << '\n';
}
int32_t main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int t = 1;
for (; t > 0; t--) {
solve();
}
return 0;
}