#include<cstdio>
#include<iostream>
using namespace std;
const int sum=110;
int direct[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
int a[sum][sum],queue[sum*sum][2];
int n,m,cnt=0,i;
bool trav[sum][sum];
void feed(int x,int y)
{
int head=0,tail=1,x1,y1;
queue[1][0]=x;
queue[1][1]=y;
trav[x][y]=true;//入队给他搜索过的标记,省去再次搜索的时间
cout<<"连通块起点:"<<x<<y<<endl;
while(head<tail)//头指针和尾指针重合队列为空
{
head++;//出队
x=queue[head][0];
y=queue[head][1];
for(int i=0;i<4;i++)//这里的i没有用int导致了错误,全局变量与局部变量的大bug
{
x1=x+direct[i][0];
y1=y+direct[i][1];
if(x1<1||x1>n||y1<1||y1>m||!a[x1][y1]||trav[x1][y1]==true)
continue;
++tail;//入队
queue[tail][0]=x1;
queue[tail][1]=y1;
cout<<x1<<y1<<endl;
trav[x1][y1]=true;
}
}
}
int main()
{
int j;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++) cin>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]&&!trav[i][j])
{
cnt++;
feed(i,j);
}
cout<<"总计"<<cnt<<endl;
return 0;
}