#include <bits/stdc++.h>
using namespace std;
vector<int> v[200005];
int ok[200005];
pair<int, int> dfs2(int first, int f) {
  pair<int, int> p = make_pair(0, first);
  for (auto it : v[first]) {
    if (ok[it] && it != f) {
      p = max(p, dfs2(it, first));
    }
  }
  p.first++;
  return p;
}
vector<pair<int, int> > ch[200005];
void dfs3(int s, int first, int f, int d) {
  if (v[first].size() == 1) {
    ch[s].push_back(make_pair(d, first));
  }
  for (auto it : v[first]) {
    if (it != f && !ok[it]) {
      dfs3(s, it, first, d + 1);
    }
  }
  if (s == first) {
    sort(ch[s].begin(), ch[s].end());
    reverse(ch[s].begin(), ch[s].end());
  }
}
vector<int> stk;
bool dfs4(int first, int f, int t) {
  stk.push_back(first);
  if (first == t) {
    return true;
  }
  for (auto it : v[first]) {
    if (it != f && ok[it]) {
      if (dfs4(it, first, t)) {
        return true;
      }
    }
  }
  stk.pop_back();
  return false;
}
int dis[200005];
void dfs5(int first, int f, int d) {
  dis[first] = d;
  for (auto it : v[first]) {
    if (it != f && ok[it]) {
      dfs5(it, first, d + 1);
    }
  }
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n - 1; i++) {
    int first, second;
    scanf("%d %d", &first, &second);
    v[first].push_back(second);
    v[second].push_back(first);
  }
  int a, b, c, d;
  int first = 0;
  for (int i = 1; i <= n; i++) {
    if (v[i].size() >= 3) {
      first = i;
    }
  }
  fill(ok, ok + n + 1, 1);
  queue<int> q;
  for (int i = 1; i <= n; i++) {
    if (v[i].size() == 1) q.push(i), ok[i] = 0;
  }
  while (!q.empty()) {
    int first = q.front();
    q.pop();
    for (auto it : v[first]) {
      if (ok[it] && v[it].size() < 3) {
        q.push(it);
        ok[it] = 0;
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    if (ok[i]) {
      int cnt = 0;
      for (auto it : v[i])
        if (ok[it]) cnt++;
      if (cnt <= 1) dfs3(i, i, 0, 0);
    }
  }
  pair<int, int> p = dfs2(first, 0);
  if (p.first != 1) {
    pair<int, int> p2 = dfs2(p.second, 0);
    dfs4(p.second, 0, p2.second);
    int mid = stk[stk.size() / 2];
    int l = (p2.first - 1) / 2, r = p2.first / 2;
    int acx = -1, ai = 0, bdx = -1;
    memset(dis, -1, sizeof(dis));
    dfs5(mid, 0, 0);
    for (int i = 1; i <= n; i++) {
      if (dis[i] == r && ch[i].size() >= 2) {
        if (ch[i][0].first + ch[i][1].first > acx) {
          acx = ch[i][0].first + ch[i][1].first;
          a = ch[i][0].second;
          c = ch[i][1].second;
          ai = i;
        }
      }
    }
    dfs5(ai, 0, 0);
    for (int i = 1; i <= n; i++) {
      if (dis[i] == stk.size() - 1 && ch[i].size() >= 2) {
        if (ch[i][0].first + ch[i][1].first > bdx) {
          bdx = ch[i][0].first + ch[i][1].first;
          b = ch[i][0].second;
          d = ch[i][1].second;
        }
      }
    }
  } else {
    a = ch[first][0].second;
    b = ch[first][1].second;
    c = ch[first][2].second;
    d = ch[first][3].second;
  }
  printf("%d %d\n%d %d\n", a, b, c, d);
}
