#include <bits/stdc++.h>
using namespace std;
const int Maxn = 2e5 + 5;
inline int R() {
  char c;
  int sign = 1, res = 0;
  while ((c = getchar()) > '9' || c < '0')
    if (c == '-') sign = -1;
  res += c - '0';
  while ((c = getchar()) >= '0' && c <= '9') res = res * 10 + c - '0';
  return res * sign;
}
int n, First[Maxn], Next[Maxn * 2], to[Maxn * 2], cnt = 1, du[Maxn];
int dp1[Maxn], dp2[Maxn], M, L, P, rt, son1[Maxn], son2[Maxn];
inline void add(int z, int y) {
  Next[++cnt] = First[z];
  First[z] = cnt;
  to[cnt] = y;
  du[z]++;
}
void deal(int pos, int father, int dep) {
  dp1[pos] = dp2[pos] = 0;
  for (int k = First[pos]; k; k = Next[k]) {
    if (to[k] == father) continue;
    deal(to[k], pos, dep + 1);
    if (dp1[to[k]] + 1 > dp1[pos]) {
      son2[pos] = son1[pos];
      son1[pos] = to[k];
      dp2[pos] = dp1[pos];
      dp1[pos] = dp1[to[k]] + 1;
    } else if (dp1[to[k]] + 1 > dp2[pos]) {
      son2[pos] = to[k];
      dp2[pos] = dp1[to[k]] + 1;
    }
  }
  if (du[pos] >= 3 && dep >= M) {
    if (dep == M) {
      if (dp1[pos] + dp2[pos] > L) {
        L = dp1[pos] + dp2[pos];
        P = pos;
      }
    } else {
      L = dp1[pos] + dp2[pos];
      M = dep;
      P = pos;
    }
  }
}
int M1, M2, ans1[3], ans2[3];
void dfs(int pos, int father, int dep) {
  if (dep > M) {
    M = dep;
    P = pos;
  }
  for (int k = First[pos]; k; k = Next[k]) {
    if (to[k] == father) continue;
    dfs(to[k], pos, dep + 1);
  }
}
int main() {
  n = R();
  int x, y;
  for (int i = 1; i < n; i++) {
    x = R();
    y = R();
    add(x, y);
    add(y, x);
  }
  M = L = 0;
  deal(1, 0, 1);
  rt = P;
  M = 0;
  dfs(son1[rt], rt, 1);
  ans1[1] = P;
  M = 0;
  dfs(son2[rt], rt, 1);
  ans2[1] = P;
  M = L = 0;
  deal(rt, 0, 1);
  rt = P;
  M = 0;
  dfs(son1[rt], rt, 1);
  ans1[2] = P;
  M = 0;
  dfs(son2[rt], rt, 1);
  ans2[2] = P;
  printf("%d %d\n%d %d", ans1[1], ans1[2], ans2[1], ans2[2]);
}
