#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const int MAXN = 200005;
int n;
vector<int> g[MAXN];
int num[MAXN], w[MAXN];
void dfs(int u, int p) {
  if (u && g[u].size() == 1) {
    w[u] = 1;
  } else {
    w[u] = 0;
    for (size_t i = 0; i < g[u].size(); i++) {
      int v = g[u][i];
      if (v != p) {
        dfs(v, u);
        w[u] += w[v];
      }
    }
  }
}
void dfs1(int u, int p, bool f) {
  if (u && g[u].size() == 1) {
    num[u] = 1;
    return;
  }
  for (size_t i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v != p) {
      dfs1(v, u, !f);
    }
  }
  if (f) {
    int mn = 1e9;
    for (size_t i = 0; i < g[u].size(); i++) {
      int v = g[u][i];
      if (v != p) {
        mn = min(mn, w[v] - num[v]);
      }
    }
    num[u] = w[u] - mn;
  } else {
    int cnt = 1;
    for (size_t i = 0; i < g[u].size(); i++) {
      int v = g[u][i];
      if (v != p) {
        cnt += num[v] - 1;
      }
    }
    num[u] = cnt;
  }
}
void dfs2(int u, int p, bool f) {
  if (u && g[u].size() == 1) {
    num[u] = 1;
    return;
  }
  for (size_t i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v != p) {
      dfs2(v, u, !f);
    }
  }
  if (f) {
    int cnt = 0;
    for (size_t i = 0; i < g[u].size(); i++) {
      int v = g[u][i];
      if (v != p) {
        cnt += num[v];
      }
    }
    num[u] = cnt;
  } else {
    int mn = 1e9;
    for (size_t i = 0; i < g[u].size(); i++) {
      int v = g[u][i];
      if (v != p) {
        mn = min(mn, num[v]);
      }
    }
    num[u] = mn;
  }
}
void solve() {
  if (n == 1) {
    cout << 1 << ' ' << 1 << endl;
    return;
  }
  dfs(0, 0);
  dfs1(0, 0, 1);
  cout << num[0] << ' ';
  dfs2(0, 0, 1);
  cout << num[0] << endl;
}
int main() {
  while (scanf("%d", &n) == 1) {
    for (int i = 0; i < n; i++) {
      g[i].clear();
    }
    for (int i = 0; i < n - 1; i++) {
      int a, b;
      scanf("%d %d", &a, &b);
      a--;
      b--;
      g[a].push_back(b);
      g[b].push_back(a);
    }
    solve();
  }
}
