#include <bits/stdc++.h>
using namespace std;
long long vectorMult(pair<int, int> a, pair<int, int> b, pair<int, int> c) {
  return (c.first - a.first) * 1ll * (b.second - a.second) -
         (c.second - a.second) * 1ll * (b.first - a.first);
}
bool cmp(pair<int, int> a, pair<int, int> b) {
  return a.first < b.first || a.first == b.first && a.second < b.second;
}
vector<pair<int, int> > convex_hull(vector<pair<int, int> > t) {
  if (t.size() == 1) return t;
  sort(t.begin(), t.end(), cmp);
  vector<pair<int, int> > up, down;
  auto l = t[0];
  auto r = t.back();
  up.push_back(t[0]);
  down.push_back(t[0]);
  for (int i = 1; i < t.size(); i++) {
    if (vectorMult(l, r, t[i]) <= 0) {
      while (up.size() >= 2 &&
             vectorMult(up[up.size() - 2], up.back(), t[i]) <= 0) {
        up.pop_back();
      }
      up.push_back(t[i]);
    }
    if (vectorMult(l, r, t[i]) >= 0) {
      while (down.size() >= 2 &&
             vectorMult(down[down.size() - 2], down.back(), t[i]) >= 0) {
        down.pop_back();
      }
      down.push_back(t[i]);
    }
  }
  up.insert(up.end(), down.rbegin() + 1, down.rend() - 1);
  if (up.size() == 2 && up[0] == up[1]) up.pop_back();
  return up;
}
int main() {
  ios_base::sync_with_stdio(0);
  while (true) {
    int n;
    cin >> n;
    if (n == 0) break;
    vector<string> v;
    for (int i = 0; i < n; i++) {
      string x;
      cin >> x;
      v.push_back(x);
    }
    for (int i = 0; i < n - i - 1; i++) {
      swap(v[i], v[n - i - 1]);
    }
    vector<pair<int, int> > t;
    for (int i = 0; i < n - 1; i++) {
      for (int j = 0; j < n - 1; j++) {
        if (v[i][j] > '0' && v[i][j + 1] > '0' && v[i + 1][j] > '0' &&
            v[i + 1][j + 1] > '0') {
          t.push_back(make_pair(j + 1, i + 1));
        }
      }
    }
    t = convex_hull(t);
    int mn = 0;
    for (int i = 1; i < t.size(); i++)
      if (t[i] < t[mn]) {
        mn = i;
      }
    vector<pair<int, int> > ans;
    ans.insert(ans.end(), t.begin() + mn, t.end());
    ans.insert(ans.end(), t.begin(), t.begin() + mn);
    cout << ans.size() << endl;
    for (auto it : ans) cout << it.first << " " << it.second << endl;
  }
  return 0;
}
