#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
vector<int> e[N];
int n, fi[N], se[N];
int fa[N], d[N], P, E, R;
void dfs(int x) {
  int son = 0;
  d[x] = d[fa[x]] + 1, fi[x] = x;
  for (int i = 0; i < e[x].size(); i++)
    if (e[x][i] != fa[x]) {
      fa[e[x][i]] = x, dfs(e[x][i]), son++;
      if (d[fi[e[x][i]]] > d[fi[x]])
        se[x] = fi[x], fi[x] = fi[e[x][i]];
      else if (d[fi[e[x][i]] > d[se[x]]])
        se[x] = fi[e[x][i]];
    }
  if (son >= 2 && (d[x] > d[P] ||
                   (d[x] == d[P] && d[fi[x]] + d[se[x]] > d[fi[P]] + d[se[P]])))
    P = x;
}
void find(int x) {
  int son = 0;
  for (int i = 0; i < e[x].size(); i++)
    if (e[x][i] != fa[x]) find(e[x][i]), son++;
  if (!son) {
    if (d[x] > d[E])
      R = E, E = x;
    else if (d[x] > d[R])
      R = x;
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    e[x].push_back(y);
    e[y].push_back(x);
  }
  dfs(1), find(P);
  memset(fa, 0, sizeof(fa));
  memset(se, 0, sizeof(se));
  int ans1 = E, ans2 = R;
  E = 0, R = 0;
  dfs(P), find(P);
  printf("%d %d\n%d %d", ans1, E, ans2, R);
  return 0;
}
