#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 110;
const int MAXN = 110;
const int inf = 0x7fffffff;
const double eps = 1e-8;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 3) + (x << 1) + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int n;
struct node {
  int d, f;
  friend bool operator<(node a1, node a2) { return a1.d < a2.d; }
  friend bool operator>(node a1, node a2) { return a1.d > a2.d; }
  friend bool operator<=(node a1, node a2) { return a1.d <= a2.d; }
  friend bool operator>=(node a1, node a2) { return a1.d >= a2.d; }
};
node f[N], g[N];
struct node1 {
  int dis, id, val;
  friend bool operator<(node1 a1, node1 a2) {
    return a1.dis == a2.dis ? a1.val < a2.val : a1.dis < a2.dis;
  }
};
vector<node1> vec;
struct Graph {
  int cnt, head[N];
  struct edge {
    int to, nxt;
  };
  edge e[N];
  inline void add_edge(int u, int v) {
    e[++cnt] = (edge){v, head[u]};
    head[u] = cnt;
  }
  inline void Insert(int u, int v) {
    add_edge(u, v);
    add_edge(v, u);
  }
  inline void DFS(int x, int pre, int dis) {
    int num = 0;
    for (register int i = head[x]; i; i = e[i].nxt) {
      int v = e[i].to;
      if (v == pre) continue;
      num++;
      DFS(v, x, dis + 1);
      if (f[x] < f[v]) {
        g[x] = f[x];
        f[x] = f[v];
      } else if (f[x] > g[x])
        g[x] = f[v];
    }
    if (num == 0) f[x] = (node){dis, x};
    if (num >= 2) vec.push_back((node1){dis, x, f[x].d + g[x].d});
  }
};
Graph G;
int main() {
  n = read();
  for (register int i = 1; i < n; i++) {
    int u = read(), v = read();
    G.Insert(u, v);
  }
  G.DFS(1, 0, 0);
  sort(vec.begin(), vec.end());
  int ID = vec[vec.size() - 1].id;
  int ans1 = f[ID].f, ans3 = g[ID].f;
  memset(f, 0, sizeof(f));
  memset(g, 0, sizeof(g));
  vec.clear();
  G.DFS(ID, 0, 1);
  sort(vec.begin(), vec.end());
  ID = vec[vec.size() - 1].id;
  int ans2 = f[ID].f, ans4 = g[ID].f;
  printf("%d %d\n%d %d", ans1, ans2, ans3, ans4);
  return 0;
}
