#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5, inf = 1e9;
int par[N], d[N][2], val[N], h[N], r, s, dis, tot;
vector<int> g[N];
pair<int, int> dfs(int v) {
  int h = -1, far = -1;
  for (int u : g[v])
    if (u != par[v]) {
      par[u] = v;
      pair<int, int> p = dfs(u);
      if (p.first && p.first > h) h = p.first, far = p.second;
    }
  if (h == -1 && g[v].size() > 2) h = 0, far = v;
  return {h + 1, far};
}
int dfs2(int v, int p = 0) {
  for (int u : g[v])
    if (u != p) {
      h[u] = h[v] + 1;
      int x = dfs2(u, v);
      if (h[x] > h[d[v][0]])
        d[v][1] = d[v][0], d[v][0] = x;
      else if (h[x] > h[d[v][1]])
        d[v][1] = x;
    }
  if (d[v][1]) val[v] = h[d[v][0]] + h[d[v][1]] - 2 * h[v];
  return (d[v][0] ? d[v][0] : v);
}
int Solve(int v, int p = 0) {
  int x = 0, y = 0;
  for (int u : g[v])
    if (u != p) {
      int z = Solve(u, v);
      if (h[z] > h[x] || (h[z] == h[x] && val[z] > val[x]))
        y = x, x = z;
      else if (h[z] > h[y] || (h[z] == h[y] && val[z] > val[y]))
        y = z;
    }
  if (val[y]) {
    if (h[x] + h[y] - 2 * h[v] > dis)
      dis = h[x] + h[y] - 2 * h[v], tot = val[x] + val[y], r = x, s = y;
    else if (h[x] + h[y] - 2 * h[v] == dis && val[x] + val[y] > tot)
      tot = val[x] + val[y], r = x, s = y;
  }
  if (x) return x;
  return (val[v] ? v : 0);
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n;
  cin >> n;
  for (int i = 1; i < n; i++) {
    int u, v;
    cin >> u >> v;
    g[u].push_back(v), g[v].push_back(u);
  }
  for (int i = 1; i <= n; i++)
    if (g[i].size() > 2) r = i;
  r = dfs(r).second;
  par[r] = 0;
  s = dfs(r).second;
  if (par[s] == r)
    dfs2(s, r), dfs2(r, s);
  else
    dfs2(par[s]), Solve(par[s]);
  cout << d[s][0] << " " << d[r][0] << "\n"
       << d[s][1] << " " << d[r][1] << "\n";
  return 0;
}
