#include <bits/stdc++.h>
using namespace std;
void Freopen() {
  freopen(
      "title"
      ".in",
      "r", stdin);
  freopen(
      "title"
      ".out",
      "w", stdout);
}
int read() {
  int g = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || '9' < ch) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while ('0' <= ch && ch <= '9') {
    g = g * 10 + ch - '0';
    ch = getchar();
  }
  return g * f;
}
const int N = 2e5 + 5;
int d[N], mx, tot, maxn[N], st, ed, n;
vector<int> G[N];
void dfs(int x, int fa, int dep) {
  d[x] = dep;
  int son = 0, mx2 = 0;
  for (auto y : G[x])
    if (y ^ fa) {
      dfs(y, x, dep + 1);
      if (d[maxn[y]] > d[maxn[x]])
        mx2 = maxn[x], maxn[x] = maxn[y];
      else if (d[maxn[y]] > d[mx2])
        mx2 = maxn[y];
      son++;
    }
  if (!son) maxn[x] = x;
  if (son > 1 && (d[x] > d[mx] || d[x] == d[mx] && d[maxn[x]] + d[mx2] > tot)) {
    tot = d[maxn[x]] + d[mx2];
    mx = x;
  }
}
void get(int x) {
  int son = 0;
  for (auto y : G[x])
    if (d[y] > d[x]) {
      get(y);
      son++;
    }
  if (!son) {
    if (d[x] > d[st]) {
      ed = st, st = x;
    } else if (d[x] > d[ed]) {
      ed = x;
    }
  }
}
signed main() {
  n = read();
  for (int i = (1); i <= (n - 1); i++) {
    int x = read(), y = read();
    G[x].push_back(y);
    G[y].push_back(x);
  }
  tot = 0;
  dfs(1, 0, 0);
  int x = mx;
  get(x);
  int st1 = st, st2 = ed;
  mx = tot = st = ed = 0;
  dfs(x, 0, 0);
  int y = mx;
  get(y);
  int ed1 = st, ed2 = ed;
  cout << st1 << ' ' << ed1 << '\n';
  cout << st2 << ' ' << ed2 << '\n';
  return signed();
}
