import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; class Axis { int x, y; Axis(int x, int y) { this.x = x; this.y = y; } } public class _16946 { static int N, M; static int[][] MAP, groupMAP; static boolean[][] visited; static int[] dx = {1, -1, 0, 0}, dy = {0, 0, 1, -1}; static int findGroupSize(int x, int y, int group) { Queue qu = new ArrayDeque<>(); qu.add(new Axis(x, y)); visited[y][x] = true; groupMAP[y][x] = group; int size = 1; while(!qu.isEmpty()) { Axis now = qu.poll(); for(int i=0; i<4; i++) { int nx = now.x + dx[i], ny = now.y + dy[i]; if(0 <= nx && nx < M && 0 <= ny && ny < N && !visited[ny][nx] && MAP[ny][nx] != 1) { visited[ny][nx] = true; size++; qu.add(new Axis(nx, ny)); groupMAP[ny][nx] = group; } } } return size; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); MAP = new int[N][M]; for(int i=0; i groupSize = new ArrayList<>(); int group = 0; for(int i=0; i nx || nx >= M || 0 > ny || ny >= N || MAP[ny][nx] == 1) continue; nearGroups[idx++] = groupMAP[ny][nx]; } for(int k=0; k