#include using namespace std; int main() { int N; cin >> N; vector> G(N); for( int i = 0; i < N-1; i++ ) { int a, b; cin >> a >> b; a--, b--; G[a].push_back(b); G[b].push_back(a); } vector> dp(N, vector(2)); for( int i = 0; i < N; i++ ) { dp[i][0] = 0; dp[i][1] = ( i != 0 && G[i].size() == 1 ? 0 : N-1 ); } auto dfs = [&](auto dfs, int cur, int pre) -> void { for( int &nxt : G[cur] ) { if( nxt != pre ) dfs(dfs, nxt, cur); } if( pre != -1 ) { dp[pre][0] = max(dp[pre][0], dp[cur][1]+1); dp[pre][1] = min(dp[pre][1], dp[cur][0]+1); } }; dfs(dfs, 0, -1); cout << dp[0][0] << endl; cout << dp[0][1] << endl; }