func_code_string: #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;   }   