#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
const long long INF = 1e16 + 5;
const long long MOD = 1e9 + 7;
vector<int> G[MAXN];
int N;
vector<int> tsort() {
  vector<int> R, D(2 * N, 0);
  priority_queue<int> Q;
  for (int i = (0); i < int(N); i++)
    for (auto &v : G[i]) D[v]++;
  for (int i = (0); i < int(N); i++)
    if (!D[i]) Q.push(-i);
  while (!Q.empty()) {
    int x = -Q.top();
    Q.pop();
    R.push_back(x);
    for (auto &v : G[x])
      if (!--D[v]) Q.push(-v);
  }
  return R;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> N;
  set<pair<int, int> > seen;
  for (int i = (0); i < int(N * (N - 1) / 2 - 1); i++) {
    int x, y;
    cin >> x >> y;
    x--, y--;
    G[x].push_back(y);
    seen.insert({min(x, y), max(x, y)});
  }
  auto getboi = [&]() {
    for (int i = (0); i < int(N); i++)
      for (int j = (i + 1); j < int(N); j++)
        if (!seen.count({i, j})) return pair<int, int>(i, j);
    return pair<int, int>(-1, -1);
  };
  auto order = tsort();
  pair<int, int> miss = getboi(), ans;
  for (auto &v : order) {
    if (v == miss.first) {
      ans = {miss.first + 1, miss.second + 1};
      break;
    }
    if (v == miss.second) {
      ans = {miss.second + 1, miss.first + 1};
      break;
    }
  }
  cout << ans.first << ' ' << ans.second << endl;
  return 0;
}
