#include <bits/stdc++.h>
using namespace std;
const long long inf = 998244353;
long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return f * x;
}
struct edge {
  int t;
  edge *next;
} e[400005], *h[200005], *o = e;
void add(int x, int y) {
  o->t = y;
  o->next = h[x];
  h[x] = o++;
}
int n, _x, _y, b[200005], d[200005], t1, t2, t3, t4, son[200005], s1, s2, s3,
    s4;
bool _v[200005];
void dfs1(int x, int f) {
  _v[x]++;
  for (edge *j = h[x]; j; j = j->next)
    if (j->t != f && b[j->t] <= 2) dfs1(j->t, x);
}
void dfs2(int x, int f) {
  for (edge *j = h[x]; j; j = j->next)
    if (j->t != f && !_v[j->t]) d[j->t] = d[x] + 1, dfs2(j->t, x);
}
void dfs3(int x, int f) {
  son[x] = x;
  for (edge *j = h[x]; j; j = j->next)
    if (j->t != f && _v[j->t]) {
      d[j->t] = d[x] + 1;
      dfs3(j->t, x);
      if (d[son[x]] < d[son[j->t]]) son[x] = son[j->t];
    }
}
int main() {
  n = read();
  for (int i = 1; i <= n - 1; i++) {
    _x = read();
    _y = read();
    add(_x, _y);
    add(_y, _x);
    b[_x]++;
    b[_y]++;
  }
  for (int i = 1; i <= n; i++)
    if (b[i] == 1) dfs1(i, 0);
  for (int i = 1; i <= n; i++)
    if (!_v[i]) {
      dfs2(i, 0);
      break;
    }
  for (int i = 1; i <= n; i++)
    if (d[_x] < d[i]) _x = i;
  memset(d, 0, sizeof(d));
  dfs2(_x, 0);
  for (int i = 1; i <= n; i++)
    if (d[_y] < d[i]) _y = i;
  for (int i = 1; i <= n; i++)
    if (d[i] == d[_y]) {
      t1 = t2 = 0;
      for (edge *j = h[i]; j; j = j->next)
        if (_v[j->t]) {
          d[j->t] = 1;
          dfs3(j->t, i);
          if (d[son[j->t]] >= d[t1])
            t2 = t1, t1 = son[j->t];
          else if (d[son[j->t]] > d[t2])
            t2 = son[j->t];
        }
      if (d[s1] + d[s2] < d[t1] + d[t2]) s1 = t1, s2 = t2;
    }
  memset(d, 0, sizeof(d));
  dfs2(_y, 0);
  memset(son, 0, sizeof(son));
  for (int i = 1; i <= n; i++)
    if (d[i] == d[_x]) {
      t3 = t4 = 0;
      for (edge *j = h[i]; j; j = j->next)
        if (_v[j->t]) {
          d[j->t] = 1;
          dfs3(j->t, i);
          if (d[son[j->t]] >= d[t3])
            t4 = t3, t3 = son[j->t];
          else if (d[son[j->t]] > d[t4])
            t4 = son[j->t];
        }
      if (d[s3] + d[s4] < d[t3] + d[t4] &&
          !((s1 == t3 || s2 == t3 || s1 == t4 || s2 == t4)))
        s3 = t3, s4 = t4;
    }
  return 0 * printf("%d %d\n%d %d\n", s1, s3, s2, s4);
}
