#include <bits/stdc++.h>
using namespace std;
static long long gcd(long long x, long long y) {
  return 0 == y ? x : gcd(y, x % y);
}
static long long powm(long long x, long long n, long long m) {
  long long r = 1;
  while (n > 0) {
    if (n & 1) r = r * x % m;
    x = x * x % m;
    n /= 2;
  }
  return r;
}
static const long long mod = 998244353;
static const int maxn = 1 << 19;
vector<int> g[maxn];
int dx[maxn], dy[maxn], deep[maxn];
int n, ans[4];
pair<int, int> max_dist;
int max_id;
void dfs(int x, int pa = 0) {
  int son = 0;
  dx[x] = 0;
  dy[x] = 0;
  for (int y : g[x]) {
    if (y == pa) continue;
    deep[y] = 1 + deep[x];
    dfs(y, x);
    if (dx[x] == 0 || deep[dx[x]] <= deep[dx[y]]) {
      dy[x] = dx[x];
      dx[x] = dx[y];
    } else if (dy[x] == 0 || deep[dy[x]] <= deep[dx[y]]) {
      dy[x] = dx[y];
    }
    ++son;
  }
  if (!son) {
    dx[x] = x;
  }
  if (son >= 2) {
    pair<int, int> dist = pair<int, int>(deep[x], deep[dx[x]] + deep[dy[x]]);
    if (dist >= max_dist) {
      max_dist = dist;
      max_id = x;
    }
  }
}
int solve() {
  scanf("%d", &n);
  for (int i = 1; i < n; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  max_dist = pair<int, int>(0, 0);
  dfs(1);
  ans[0] = dx[max_id];
  ans[1] = dy[max_id];
  dfs(max_id);
  max_dist = pair<int, int>(0, 0);
  ans[2] = dx[max_id];
  ans[3] = dy[max_id];
  printf("%d %d\n", ans[0], ans[2]);
  printf("%d %d\n", ans[1], ans[3]);
  return 0;
}
int main() {
  ::std::ios::sync_with_stdio(false);
  ::std::cin.tie(0);
  ::std::cout.tie(0);
  int t = 1;
  while (t--) solve();
}
