#include<stdio.h>
int next[500][500], sef[500][500], n, latura, vzt, coul;
char culoare[500][500];
void init( int n )
{
int i, j;
for (i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
sef[i][j] = i * n + j;
next[i][j] = i * 500 + j;
}
}
}
int find(int l, int c)
{
return sef[l][c];
}
void unire(int l1, int c1, int l2, int c2)
{
int fx, i, nx, j, l, c;
fx = find(l1, c1);
if (fx != find(l2, c2)) {
i = l2;
j = c2;
do {
sef[i][j] = fx;
l = next[i][j] / 500;
c = next[i][j] % 500;
i = l;
j = c;
} while ( ( i != l2 ) && ( j != c2 ) );
nx = next[l1][c1];
next[l1][c1] = next[l2][c2];
next[l2][c2] = nx;
}
}
int testare(l, c) {
if( l >= 0 && c >= 0 && l < n && c < n) {
return 1;
}
else {
return 0;
}
}
void printAll (int crt)
{
int i, j;
printf("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \n");
printf("culoare =\n");
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
printf("%2d ", culoare[i][j]);
}
printf("\n");
}
printf("sef =\n");
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
printf("%2d ", sef[i][j]);
}
printf("\n");
}
printf("next =\n");
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
printf("%2d ", next[i][j]);
}
printf("\n");
}
printf("\n");
printf("coul = %d crt = %d vzt = %d\n", coul, crt, vzt);
printf("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \n");
}
int main ()
{
int i, l, c, x, k;
FILE *in, *out;
in = fopen("hex.in", "r");
out = fopen("hex.out", "w");
fscanf(in, "%d", &n);
init(n);
latura = n;
n = n * n;
for(i = 0; i < n; i++) {
fscanf(in, "%d%d", &l, &c);
l = l - 1;
c = c - 1;
coul = ( i % 2 ) + 1;
culoare[l][c] = coul; // rosu = 1 albastru = 2
if(testare(l - 1, c) == 1 && culoare[l - 1][c] == coul) {
unire(l, c, l - 1, c);
}
if( testare(l + 1, c) && culoare[l + 1][c] == coul) {
unire(l, c, l + 1, c);
}
if( testare(l - 1, c + 1) && culoare[l - 1][c + 1] == coul) {
unire(l, c, l - 1, c + 1);
}
if( testare(l + 1, c - 1) && culoare[l + 1][c - 1] == coul) {
unire(l, c, l + 1, c - 1);
}
if( testare(l, c + 1) && culoare[l][c + 1] == coul) {
unire(l, c, l, c + 1);
}
if( testare(l, c - 1) && culoare[l][c - 1] == coul) {
unire(l, c, l, c - 1);
}
x = sef[l][c];
vzt = 0;
if(coul == 1) {
for(k = 0; k < latura; k++) {
if(sef[k][0] == x) {
vzt++;
}
if(sef[k][latura - 1] == x) {
vzt++;
}
}
}
if(coul == 2) {
for(k = 0; k < latura; k++) {
if(sef[0][k] == x) {
vzt++;
}
if(sef[latura - 1][k] == x) {
vzt++;
}
}
}
//printAll(i + 1);
if(vzt >= 2) {
fprintf(out, "%d", i + 1);
break;
}
//printAll(i + 1);
}
fclose(in);
fclose(out);
return 0;
}