if (row_c > row_nd + 1) col_c = w;
if (row_a > row_nd) col_a = w;
int col_min = min(col_a, min(col_b, col_c));
return getPos(row_nd, col_min);
}
int main () {
while ( (scanf("%d", &w), w) ) {
int a[] = {-1, -1 + w, -1 - w, w, -w, 1 + w, 1, 1 - w};
around = a;
int x, y;
cnt = -1;
sum = 0;
begin[0] = 1;
memset (cha, 0, sizeof(cha));
memset (ans, 0, sizeof(ans));
while ( (scanf ("%d %d", &x, &y), x + y ) ) {
pix[++ cnt] = x;
begin[cnt + 1] = begin[cnt] + y;
sum += y;
}
int anscnt = 0;
/*
for (int i = 1; i <= sum; ++ i) {
printf ("%d ", getMax(i));
if (i % w == 0) printf ("\n");
}
*/
int p = 2;
cha[0] = getMax(1);
ans[0] = 1;
while (p <= sum) {
int tmp = next(p);
if (mp == cha[anscnt]) {
ans[anscnt] += tmp - p + 1;
}
else {
cha[++ anscnt] = mp;
ans[anscnt] = tmp - p + 1;
}
if (getMax(tmp) != getMax(tmp - 1) && (tmp - p) >=1 ) {
-- ans[anscnt];
cha [++ anscnt] = getMax(tmp);
ans[anscnt] = 1;
} www.2cto.com
p = tmp + 1;
if(p > sum) break;
if (getMax(p) == cha[anscnt]) ++ ans[anscnt];
else {
cha[++ anscnt] = getMax(p);
ans[anscnt] = 1;
}
++ p;
}
printf ("%d\n", w);
for (int i = 0; i <= anscnt; ++ i) {
printf ("%d %d\n", cha[i], ans[i]);
}
printf ("0 0\n");
}
printf ("0\n");
return 0;
}