#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
const int logn = 18;
const int inf = (int)1e9 + 5;
const long long mod = (long long)1e6 + 3;
const long long base = 2204234849;
const long long l_inf = (long long)4e18;
const long double pi = acos(-1.0);
const long double eps = 1e-12;
int n;
char field[maxn][maxn];
pair<int, int> pt0;
bool good(int i, int j) {
  return i < 0 || i >= n || j < 0 || j >= n || field[i][j] != '0';
}
bool inside(int x, int y) {
  return good(n - y - 1, x - 1) && good(n - y, x - 1) && good(n - y - 1, x) &&
         good(n - y, x);
}
pair<int, int> operator-(const pair<int, int> &a, const pair<int, int> &b) {
  return make_pair(a.first - b.first, a.second - b.second);
}
int operator*(const pair<int, int> &a, const pair<int, int> &b) {
  return a.first * b.second - a.second * b.first;
}
int len(const pair<int, int> &a) {
  return a.first * a.first + a.second * a.second;
}
bool cmp(const pair<int, int> &a, const pair<int, int> &b) {
  int mul = (a - pt0) * (b - pt0);
  if (mul == 0) return len(a - pt0) < len(b - pt0);
  return mul > 0;
}
void solve() {
  for (int i = 0; i < n; i++) scanf("%s", field[i]);
  vector<pair<int, int> > pt;
  pt0 = make_pair(inf, inf);
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= n; j++) {
      if (inside(i, j)) {
        pt.push_back(make_pair(i, j));
        pt0 = min(pt0, make_pair(i, j));
      }
    }
  }
  sort(pt.begin(), pt.end(), cmp);
  vector<pair<int, int> > hull;
  hull.push_back(pt0);
  int sz = 1;
  for (int i = 1; i < (int)pt.size(); i++) {
    if (sz == 1) {
      hull.push_back(pt[i]);
      sz++;
      continue;
    }
    while (sz > 1 &&
           (pt[i] - hull[sz - 1]) * (hull[sz - 1] - hull[sz - 2]) >= 0) {
      hull.pop_back();
      sz--;
    }
    hull.push_back(pt[i]);
    sz++;
  }
  printf("%d\n", sz);
  printf("%d %d\n", hull.front().first, hull.front().second);
  while (sz > 1) {
    printf("%d %d\n", hull.back().first, hull.back().second);
    hull.pop_back();
    sz--;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(20);
  cout << fixed;
  srand(566);
  while (true) {
    scanf("%d", &n);
    if (n == 0) break;
    solve();
  }
  return 0;
}
