代码
#include<bits/stdc++.h>
using namespace std;
struct node {
int x,y;
int step;
};
int n,m,x;
char mp[1001][1001];
bool v[1001][1001];
int ans[100001];
int fx[4][2]= {1,0,0,1,-1,0,0,-1};
int bfs(int x,int y) {
int maxn=1;
queue<node>q;
node a,b;
q.push({x,y,1});
while(q.size()!=0) {
a=q.front();
q.pop();
maxn=max(maxn,a.step);
for(int i=0; i<4; i++) {
b.x=a.x+fx[i][0];
b.y=a.y+fx[i][1];
if(b.x>=0&&b.y>=0&&b.x<n&&b.y<n&&v[b.x][b.y]==0&&mp[b.x][b.y]=='1') {
b.step=a.step+1;
v[b.x][b.y]=1;
q.push(b);
}
}
}
return maxn;
}
int main() {
cin>>n;
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
cin>>mp[i][j];
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
if(mp[i][j]=='1'&&v[i][j]==0) {
ans[m++]=bfs(i,j);
}
}
}
sort(ans,ans+m);
cout<<m<<endl;
for(int i=0; i<m; i++) {
cout<<ans[i]<<endl;
}
return 0;
}