(1회차 시도 성공!)
import java.io.*;
import java.util.*;
public class Main {
static int[][] arr;
static boolean[][] visited;
static int[] dy = {-1,1,0,0};
static int[] dx = {0,0,-1,1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
arr = new int[n][n];
for (int i = 0; i < n; i++) {
char[] s = br.readLine().toCharArray();
for (int j = 0; j < n; j++) {
arr[i][j] = Character.getNumericValue(s[j]);
}
}
List<Integer> ans = new ArrayList<>();
visited = new boolean[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(arr[i][j] == 1 && !visited[i][j]){
ans.add(bfs(n, i,j));
}
}
}
Collections.sort(ans);
bw.write(ans.size()+"\n");
for (Integer an : ans) {
bw.write(an+"\n");
}
br.close();
bw.close();
}
private static Integer bfs(int n, int y, int x) {
Queue<int[]> q = new LinkedList<>();
q.add(new int[]{y,x});
visited[y][x] = true;
int count = 1;
while(!q.isEmpty()){
int[] now = q.poll();
for (int i = 0; i < 4; i++) {
int ny = dy[i] + now[0];
int nx = dx[i] + now[1];
if(ny >=0 && ny < n && nx >=0 && nx < n && !visited[ny][nx] && arr[ny][nx] == 1){
visited[ny][nx] = true;
q.add(new int[]{ny, nx});
count++;
}
}
}
return count;
}
}