/*
#include<stdio.h>
int queue[1000][2]={},front=0,rear=0;
int map[100][100]={};
void dequeue()
{
int x,y;
x = queue[front][0];
y = queue[front][1];
if(map[x-1][y]==0 && x-1>0)
{
queue[][0]=x-1;
queue[][1]=y;
}
if(map[x+1][y]==0 && x+1>0)
{
queue[][0]=x+1;
queue[][1]=y;
}
if(map[x][y-1]==0 && y-1>0)
{
queue[][0]=x;
queue[][1]=y-1;
}
if(map[x][y+1]==0 && y+1>0)
{
queue[][0]=x;
queue[][1]=y+1;
}
}
int main()
{
int m, n, i, j;
scanf("%d %d", &m, &n);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
scanf("%d", &map[i][j]);
}
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(map[i][j]==1){
queue[front][0]=i;
queue[front][1]=j;
rear++;
}
}
}
while(1)
{
dequeue();
if(rear==front)
{
break;
}
}
}
*/
#include<stdio.h>
int i, j, b[1000]={}, w[1000]={}, a=0, d;
int map[100][100];
int dfs(int x, int y)
{
if(x>=0 && y>=0 && x<19 &&y<19)
{
map[x][y] = -1;
if(map[i][j]==1)
{
b[a]++;
if(map[x][y+1]==1)
{
dfs(x,y+1);
}
if(map[x+1][y]==1)
{
dfs(x+1,y);
}
if(map[x][y-1]==1)
{
dfs(x,y-1);
}
if(map[x-1][y]==1)
{
dfs(x-1,y);
}
if(map[x][y+1]==1)
{
dfs(x+1,y+1);
}
if(map[x+1][y]==1)
{
dfs(x-1,y-1);
}
if(map[x][y-1]==1)
{
dfs(x-1,y+1);
}
if(map[x-1][y]==1)
{
dfs(x+1,y-1);
}
}
else if(map[i][j]==2)
{
w[a]++;
if(map[x][y+1]==2)
{
dfs(x,y+1);
}
if(map[x+1][y]==2)
{
dfs(x+1,y);
}
if(map[x][y-1]==2)
{
dfs(x,y-1);
}
if(map[x-1][y]==2)
{
dfs(x-1,y);
}
if(map[x][y+1]==2)
{
dfs(x+1,y+1);
}
if(map[x+1][y]==2)
{
dfs(x-1,y-1);
}
if(map[x][y-1]==2)
{
dfs(x-1,y+1);
}
if(map[x-1][y]==2)
{
dfs(x+1,y-1);
}
}
}
}
int main()
{
for(i=0; i<19; i++)
{
for(j=0; j<19; j++)
{
scanf("%d", &map[i][j]);
}
}
for(i=0; i<19; i++)
{
for(j=0; j<19; j++)
{
if(map[i][j]==1||map[i][j]==2)
{
a++;
dfs(i,j);
}
}
}
}