#include <cstdio>
using namespace std;
const int W = 10005;
const int N = 1000005;
struct Edge {
int v, next;
} edge[2 * N];
int head[W];
int cnt;
void add_edge(int u, int v) {
cnt++;
edge[cnt].v = v;
edge[cnt].next = head[u];
head[u] = cnt;
}
bool vis[N], del[N];
int v, e, maxv;
int max(int a, int b) {
return a > b ? a : b;
}
void dfs(int u) {
if (vis[u]) {
return;
}
maxv = max(maxv, u);
vis[u] = true;
v++;
for (int i = head[u]; i != 0; i = edge[i].next) {
e++;
dfs(edge[i].v);
}
}
int main() {
int n;
scanf("%d", &n);
for (int a, b, i = 1; i <= n; i++) {
scanf("%d %d", &a, &b);
add_edge(a, b);
add_edge(b, a);
}
for (int i = 1; i <= 10; i++) {
if (!vis[i]) {
v = e = maxv = 0;
dfs(i);
e /= 2;
if (v == e + 1) {
del[maxv] = true;
}
}
if (vis[i] && del[i]) {
printf("%d", i - 1);
return 0;
}
}
printf("10000");
return 0;
}