#include <bits/stdc++.h>
using namespace std;
int hijos[400000], cont, n, i, a, b, s1, s2;
vector<int> arr[400000];
int maximo(int nodo) {
  if (arr[nodo].size() == 0) {
    hijos[nodo] = 1;
    return 1;
  }
  int s, maxi, mini;
  if (cont == 0) {
    mini = -1;
    hijos[nodo] = 0;
    for (int i = 0; i < arr[nodo].size(); i++) {
      cont = 1 - cont;
      s = maximo(arr[nodo][i]);
      if (hijos[arr[nodo][i]] - s < mini || mini < 0) {
        mini = hijos[arr[nodo][i]] - s;
      }
      cont = 1 - cont;
      hijos[nodo] += hijos[arr[nodo][i]];
    }
    return (hijos[nodo] - mini);
  } else {
    maxi = 0;
    hijos[nodo] = 0;
    for (int i = 0; i < arr[nodo].size(); i++) {
      cont = 1 - cont;
      s = maximo(arr[nodo][i]);
      maxi += hijos[arr[nodo][i]] - s + 1;
      cont = 1 - cont;
      hijos[nodo] += hijos[arr[nodo][i]];
    }
    return (hijos[nodo] - maxi + 1);
  }
}
int minimo(int nodo) {
  if (arr[nodo].size() == 0) {
    hijos[nodo] = 1;
    return 1;
  }
  int s, maxi, mini;
  if (cont == 0) {
    maxi = 0;
    hijos[nodo] = 0;
    for (int i = 0; i < arr[nodo].size(); i++) {
      cont = 1 - cont;
      s = minimo(arr[nodo][i]);
      maxi += s;
      cont = 1 - cont;
      hijos[nodo] += hijos[arr[nodo][i]];
    }
    return (maxi);
  } else {
    mini = -1;
    hijos[nodo] = 0;
    for (int i = 0; i < arr[nodo].size(); i++) {
      cont = 1 - cont;
      s = minimo(arr[nodo][i]);
      if (s < mini || mini < 0) mini = s;
      cont = 1 - cont;
      hijos[nodo] += hijos[arr[nodo][i]];
    }
    if (mini < 0) mini = hijos[nodo];
    return (mini);
  }
}
int main() {
  cin >> n;
  for (i = 1; i < n; i++) {
    cin >> a >> b;
    arr[a].push_back(b);
  }
  cont = 0;
  s1 = maximo(1);
  s2 = minimo(1);
  cout << s1 << " " << s2 << endl;
  return 0;
}
