func_code_string: #include <bits/stdc++.h>   using namespace std;   long long int mod = 998244353;   long long int expo(long long int base, long long int exponent,                      long long int mod) {     long long int ans = 1;     while (exponent != 0) {       if (exponent & 1) ans = (1LL * ans * base) % mod;       base = (1LL * base * base) % mod;       exponent >>= 1;     }     return ans % mod;   }   vector<long long int> g[100005];   long long int val[100005], dist[100005];   void dfs(long long int node, long long int par, long long int d) {     dist[node] = d;     if (g[node].size() == 1) val[par]++;     for (auto x : g[node]) {       if (x != par) dfs(x, node, d + 1);     }   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     int tests = 1;     while (tests--) {       long long int i, j, u, v, n;       cin >> n;       for (long long int i = 1; i <= n - 1; i++) {         cin >> u >> v;         g[u].push_back(v);         g[v].push_back(u);       }       long long int root = -1;       for (long long int i = 1; i <= n; i++) {         if (g[i].size() > 1) {           root = i;           break;         }       }       dfs(root, 0, 0);       long long int mx = n - 1, mn;       long long int odd = 0, even = 0;       for (long long int i = 1; i <= n; i++) {         if (g[i].size() > 1) continue;         if (dist[i] % 2)           odd++;         else           even++;       }       if (odd == 0 || even == 0)         mn = 1;       else         mn = 3;       for (long long int i = 1; i <= n; i++) {         mx -= max(0LL, val[i] - 1);       }       cout << mn <<     << mx;     }     cerr <<   nTime elapsed:   << 1000 * clock() / CLOCKS_PER_SEC <<  ms n ;     return 0;   }   