#include <iostream>
#include <fstream>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
#include <numeric>
#include <utility>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <sstream>
#include <cctype>
#include <assert.h>
#include <list>
#include <ext/hash_set>
#include <ext/hash_map>

using namespace __gnu_cxx;
using namespace std;

#define MP(a,b) make_pair(a,b)
#define i64 long long
#define pb push_back
#define For(i,a,b) for(typeof(a) i=(a);i<(b);i++)
#define Rev(i,a,b) for(typeof(a) i=(a);i>=(b);i--)
#define FOREACH(V,it) for(typeof(V.begin()) it=V.begin();it!=V.end();it++)
#define CLR(a,x) memset(a,x,sizeof(a))
#define ALL(x) x.begin(),x.end()

/**********************************************************************************/

const int dx[]={0,0,1,-1};
const int dy[]={1,-1,0,0};
int n,m;
string s[100];
bool used[100][100];
int out[44];
bool ok(int x,int y){
	return x>=0 && y>=0 && x<n && y<m && s[x][y]!='#'&& !used[x][y];
}

int ffil(int x, int y){
	used[x][y]=1;
	int ret=1;
	For(i,0,4){
		if (ok(x+dx[i],y+dy[i]))
			ret+=ffil(x+dx[i],y+dy[i]);


	}
	return ret;	
}

	
int main(){
	ifstream fin("DATA3.txt"); ofstream fout("OUT3.txt");	
	int t=5;
	fin >> n >> m;
	//cout << n << ' ' << m << endl;
	For(i,0,n) fin >> s[i];

	For(i,0,n) For(j,0,m) if (s[i][j]>='1' && s[i][j]<='5'){ CLR(used,0); out[s[i][j]-'1']=ffil(i,j);}
	For(i,0,5) fout << out[i] << endl;
		
	return 0;
}
