#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T& x) {
  T f = 1;
  x = 0;
  char c;
  for (c = getchar(); !('0' <= (c) && (c) <= '9'); c = getchar())
    f = (c == '-') ? -1 : f;
  for (; ('0' <= (c) && (c) <= '9'); c = getchar())
    x = (x << 3) + (x << 1) + (c ^ 48);
  x *= f;
}
template <typename T>
inline void wt(T x, char c = 0) {
  char ch[(sizeof(T) + 1) << 1];
  if (x < 0) x = -x, putchar('-');
  int t = -1;
  do ch[++t] = x % 10 + '0', x /= 10;
  while (x);
  do putchar(ch[t]);
  while (t--);
  if (c != 0) putchar(c);
}
int n, deep[200100], a[200100], b[200100], res;
int fir[200100], to[200100 << 1], nxt[200100 << 1], cnt;
inline void ins() {
  int x, y;
  read(x), read(y);
  nxt[++cnt] = fir[x], fir[x] = cnt, to[cnt] = y;
  nxt[++cnt] = fir[y], fir[y] = cnt, to[cnt] = x;
}
pair<int, int> mx(0, 0);
inline void dfs(int x, int fa, int dep) {
  deep[x] = dep;
  int cnt = 0;
  for (int i = fir[x]; i; i = nxt[i]) {
    if (fa == to[i]) continue;
    dfs(to[i], x, dep + 1);
    cnt++;
    if (deep[a[to[i]]] > deep[a[x]])
      b[x] = a[x], a[x] = a[to[i]];
    else if (deep[a[to[i]]] > deep[b[x]])
      b[x] = a[to[i]];
  }
  if (!cnt) a[x] = x;
  if (cnt > 1) {
    pair<int, int> tmp(deep[x], deep[a[x]] + deep[b[x]]);
    if (tmp > mx) mx = tmp, res = x;
  }
}
int main(int argv, char* argc[]) {
  read(n);
  for (int i = 1; i < n; ++i) ins();
  dfs(1, 0, 1);
  int ans1 = a[res], ans2 = b[res];
  mx = pair<int, int>(0, 0);
  memset(a, 0, sizeof a), memset(b, 0, sizeof b);
  dfs(res, 0, 1);
  int ans3 = a[res], ans4 = b[res];
  wt(ans1, ' '), wt(ans3, '\n'), wt(ans2, ' '), wt(ans4, '\n');
  return 0;
}
