#include <bits/stdc++.h>   using i64 = long long;   using u64 = unsigned long long;   using u32 = unsigned;   int main() {     std::ios::sync_with_stdio(false);     std::cin.tie(nullptr);     int n;     std::cin >> n;     std::vector<int> c0(n, 0);     std::vector<int> c1(n, 0);     for (int i = 0; i < n; i++) {       std::cin >> c0[i] >> c1[i];     }     std::vector<int> tmp{0};     for (int i = 0; i < n; i++) {       tmp.emplace_back(c0[i]);       tmp.emplace_back(c1[i]);     }     std::sort(tmp.begin(), tmp.end());     tmp.resize(std::unique(tmp.begin(), tmp.end()) - tmp.begin());     for (int i = 0; i < n; i++) {       c0[i] = std::lower_bound(tmp.begin(), tmp.end(), c0[i]) - tmp.begin();       c1[i] = std::lower_bound(tmp.begin(), tmp.end(), c1[i]) - tmp.begin();     }     std::vector<int> p(tmp.size(), 0);     std::iota(p.begin(), p.end(), 0);     auto find = [&](int x) {       while (x != p[x]) {         x = p[x] = p[p[x]];       }       return x;     };     int ans = 0;     for (int i = 0; i < n; i++) {       int x = c0[i];       int y = c1[i];       x = find(x);       y = find(y);       if (!x && !y) {         std::cout << -1, exit(0);       } else {         if (x == y || !x || !y) {           ans = std::max({ans, x, y});           p[x] = p[y] = 0;         } else {           ans = std::max(ans, std::min(x, y));           p[std::min(x, y)] = std::max(x, y);         }       }     }     std::cout << tmp[ans] <<   n ;     return 0;   }   