#include <bits/stdc++.h>
using namespace std;
int plll, pll, mx = 0, mx2;
vector<int> s[202020];
int deep[202020], viss[202020], fa[202020], f[202020], g[202020], pl[202020],
    pl2[202020];
void dfs(int x) {
  int tmp, c, i, y, sum = 0;
  c = s[x].size();
  sum = 0;
  pl[x] = x;
  for (i = 0; i < c; i++) {
    y = s[x][i];
    if (fa[x] == y) continue;
    sum++;
    fa[y] = x;
    deep[y] = deep[x] + 1;
    dfs(y);
    if (f[y] + 1 > f[x]) {
      g[x] = f[x];
      pl2[x] = pl[x];
      f[x] = f[y] + 1;
      pl[x] = pl[y];
    } else if (f[y] + 1 > g[x]) {
      g[x] = f[y] + 1;
      pl2[x] = pl[y];
    }
  }
  tmp = f[x] + g[x];
  if (sum >= 2) {
    if (deep[x] > mx2 || deep[x] == mx2 && tmp > mx) {
      mx2 = deep[x];
      mx = tmp;
      pll = x;
    }
  }
}
void dfs2(int x) {
  int tmp, c, i, y, sum = 0;
  c = s[x].size();
  sum = 0;
  pl[x] = x;
  for (i = 0; i < c; i++) {
    y = s[x][i];
    if (fa[x] == y || viss[y]) continue;
    sum++;
    fa[y] = x;
    deep[y] = deep[x] + 1;
    dfs2(y);
    if (f[y] + 1 > f[x]) {
      g[x] = f[x];
      pl2[x] = pl[x];
      f[x] = f[y] + 1;
      pl[x] = pl[y];
    } else if (f[y] + 1 > g[x]) {
      g[x] = f[y] + 1;
      pl2[x] = pl[y];
    }
  }
  tmp = f[x] + g[x];
  if (sum >= 2) {
    if (deep[x] > mx2 || deep[x] == mx2 && tmp > mx) {
      mx2 = deep[x];
      mx = tmp;
      plll = x;
    }
  }
}
int main() {
  int n, i, x, y, xx, yy;
  scanf("%d", &n);
  for (i = 1; i < n; i++) {
    scanf("%d%d", &x, &y);
    s[x].push_back(y);
    s[y].push_back(x);
  }
  dfs(1);
  for (i = 0; i < s[pll].size(); i++) {
    y = s[pll][i];
    if (fa[pll] == y) continue;
    viss[y] = 1;
  }
  x = pl[pll], y = pl2[pll];
  memset(fa, 0, sizeof(fa));
  memset(f, 0, sizeof(f));
  memset(g, 0, sizeof(g));
  memset(pl, 0, sizeof(pl));
  memset(pl2, 0, sizeof(pl2));
  memset(deep, 0, sizeof(deep));
  mx = mx2 = 0;
  dfs2(pll);
  xx = pl[plll], yy = pl2[plll];
  printf("%d %d\n%d %d\n", x, xx, y, yy);
  return 0;
}
