#include <bits/stdc++.h>
using namespace std;
void debug_out() { cerr << '\n'; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << ' ' << H;
  debug_out(T...);
}
const int INF = 1e9;
const long long MOD = 1e9 + 7;
const int N = 2e5 + 5;
bool T[N];
int C[N], H[N], X[N], Y[N], Z[N], t;
vector<int> G[N];
pair<int, int> P, Q;
void TFS(int v, int p = 0) {
  C[v] = (int)(G[v].size()) > 2;
  int c = 0;
  for (int u : G[v])
    if (u != p) TFS(u, v), c += T[u], C[v] += C[u];
  T[v] = ((int)(G[v].size()) > 2 || c > 1 || (C[v] < t && C[v] > 0));
}
void DFS(int v, int p = 0) {
  X[v] = v;
  for (int u : G[v])
    if (u != p && !T[u]) {
      H[u] = H[v] + 1, DFS(u, v);
      if (H[X[u]] > H[X[v]])
        Y[v] = X[v], X[v] = X[u];
      else if (H[X[u]] > H[Y[v]])
        Y[v] = X[u];
    }
}
void CFS(int v, int p = 0) {
  Z[v] = v;
  for (int u : G[v])
    if (u != p && T[u]) {
      H[u] = H[v] + 1, CFS(u, v);
      pair<int, int> l =
          make_pair(H[Z[v]] - H[v] + H[Z[u]] - H[v],
                    H[X[Z[v]]] + H[Y[Z[v]]] + H[X[Z[u]]] + H[Y[Z[u]]]);
      if (l > P) Q = make_pair(Z[v], Z[u]), P = l;
      if (make_pair(H[Z[u]], H[X[Z[u]]] + H[Y[Z[u]]]) >
          make_pair(H[Z[v]], H[X[Z[v]]] + H[Y[Z[v]]]))
        Z[v] = Z[u];
    }
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  mt19937 Rnd(time(0));
  int n;
  cin >> n;
  for (int i = 1; i < n; i++) {
    int v, u;
    cin >> v >> u;
    G[v].push_back(u), G[u].push_back(v);
  }
  for (int i = 1; i <= n; i++) t += ((int)(G[i].size()) > 2);
  TFS(1);
  int r = 0;
  for (int i = 1; i <= n; i++)
    if (T[i]) r = i, DFS(i);
  CFS(r);
  int a = Q.first, b = Q.second;
  cout << X[a] << ' ' << X[b] << '\n' << Y[a] << ' ' << Y[b] << '\n';
  return 0;
}
