#include <iostream>
#include <vector>
#include <set>
#include <queue>
#include <algorithm>
#include <string>
#include <fstream>
#include <cctype>
#include <iomanip>
#include <cmath>
#include <cstring>
#include <map>
#include <bitset>
#include <stack>
/*  //c++11
#include <unordered_map>
#include <unordered_set>
#include <tuple>
*/

using namespace std;

//ifstream fin("1.in");
//ofstream fout("1.out");

bool used[1027][1027];
bool isC[1027][1027];
bool a[1027][1027];

pair<int, int> A,B,C,D;

const int di[24] = {0,0,1,-1,1,1,-1,-1,2,2,2,2,2,-2,-2,-2,-2,-2,-1,-1,0,0,1,1};
const int dj[24] = {1,-1,0,0,1,-1,1,-1,-2,-1,0,1,2,-2,-1,0,1,2,2,-2,2,-2,2,-2};


void afis(pair<int, int> x)
{
    cout<<x.first<<' '<<x.second<<'\n';

}
queue<pair<int, int> >  Q;

int colt;

void fa(int i, int j)
{
    int Fmarg = 0;
    for(int k = 0; k < 24; k++)
    {
        int inou = i + di[k];
        int jnou = j + dj[k];
        if(inou < 0 || jnou < 0)
            continue;
        if(!a[inou][jnou])
        {
            Fmarg ++;
        }
        if(isC[inou][jnou])
        {
            //isC[i][j] = true;
            return;
        }
    }
    if(Fmarg > 12)
    {
        colt++;
        isC[i][j] = true;
       // cout<<i<<' '<<j<<'\n';
    }
}

void dute(int i, int j)
{
    Q.push(make_pair(i,j));
    used[i][j] = true;

    while(!Q.empty())
    {
        i = Q.front().first;
        j = Q.front().second;
        Q.pop();

        fa(i,j);
    for(int k = 0; k < 8; k++)
    {
        int inou = i + di[k];
        int jnou = j + dj[k];
        if(!used[inou][jnou] && a[inou][jnou])
        {
            used[inou][jnou] = true;
            Q.push(make_pair(inou, jnou));
        }
    }
    }
}

int main()
{
    //freopen("1.in","r",stdin);
    //freopen("1.out","w",stdout);
    int n, m;
    cin>>n>>m;
    char c;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
        {
            cin>>c;
            a[i][j] = c == '1';
        }
    int linie = 0, triunghi = 0, patrat = 0, pentagon = 0;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            if(a[i][j] && !used[i][j])
            {

                colt = 0;
                dute(i,j);
                if(colt == 3)
                    triunghi ++;
                else if(colt == 4)
                    patrat ++;
                else if(colt == 5)
                    pentagon++;
                else linie++;
                //cout<<colt;

                //cout<<"da\n";

            }
    cout<<2<<' '<<linie<<'\n';
    cout<<3<<' '<<triunghi<<'\n';
    cout<<4<<' '<<patrat<<'\n';
    cout<<5<<' '<<pentagon<<'\n';
    return 0;
}


//FILE!!!