#include <bits/stdc++.h>
using namespace std;
int recur_depth = 0;
template <typename Ostream, typename Cont>
typename enable_if<is_same<Ostream, ostream>::value, Ostream&>::type operator<<(
    Ostream& os, const Cont& v) {
  os << "[";
  for (auto& x : v) {
    os << x << ", ";
  }
  return os << "]";
}
template <typename Ostream, typename... Ts>
Ostream& operator<<(Ostream& os, const pair<Ts...>& p) {
  return os << "{" << p.first << ", " << p.second << "}";
}
const long long mod = (long long)1e9 + 7;
long long power(long long x, long long y, long long p) {
  long long res = 1;
  x = x % p;
  if (x == 0) return 0;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
long long extend_gcd(long long a, long long b, long long& x, long long& y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long x1, y1;
  long long d = extend_gcd(b, a % b, x1, y1);
  x = y1;
  y = x1 - y1 * (a / b);
  return d;
}
long long modinv(long long a, long long p) { return power(a, p - 2, p); }
long long rowNum[] = {-1, 0, 0, 1};
long long colNum[] = {0, -1, 1, 0};
std::vector<int> v[(long long)2e5 + 9];
std::vector<int> vis((long long)2e5 + 9);
std::vector<int> dis((long long)2e5 + 9);
std::vector<int> deg((long long)2e5 + 9);
void dfs(int i) {
  vis[i] = 1;
  for (auto x : v[i]) {
    if (!vis[x]) {
      dis[x] = dis[i] + 1;
      dfs(x);
    }
  }
}
int check(int i) {
  int cnt = 0;
  for (auto x : v[i]) {
    for (auto y : v[x]) {
      vis[y] = 1;
      if (y != i && deg[y] == 1) cnt++;
    }
  }
  return cnt;
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    v[a].push_back(b);
    v[b].push_back(a);
    deg[a]++;
    deg[b]++;
  }
  dfs(1);
  for (int i = 1; i <= n; i++) vis[i] = 0;
  int iseven = 0, isodd = 0, diff = 0;
  for (int i = 1; i <= n; i++) {
    if (deg[i] == 1) {
      if (dis[i] % 2 == 0)
        iseven = 1;
      else
        isodd = 1;
      if (!vis[i]) diff += check(i);
    }
  }
  int mnans = 1, mxans = n - 1;
  if (iseven && isodd) mnans = 3;
  ;
  mxans = mxans - diff;
  cout << mnans << " " << mxans << endl;
}
