260113
//#include<iostream>
//
//using namespace std;
//
//#define MAX_V 100010
//#define MAX_E 400010
//
//int adj[MAX_E];
//int head[MAX_V];
//int nxt[MAX_E];
//int cnt=0;
//
//void add_edge(int u, int v);
//
//int main() {
//
// int V=5;
//
// for (int i=0; i<V; i++) {
// head[i] = -1;
// }
//
// add_edge(0,1);
// add_edge(0,4);
// add_edge(1,2);
//
// for (int i=0; i<V; i++) {
// cout<< i << "의 친구들 ";
// for (int idx= head[i]; idx != -1; idx=nxt[idx]) {
// cout << adj[idx] << "-> ";
// }
// cout << "끝" << endl;
// }
//
//
// return 0;
//}
//
//void add_edge(int u, int v) {
//
// adj[cnt] = v;
// nxt[cnt] = head[u];
// head[u] = cnt++;
//
// adj[cnt] = u;
// nxt[cnt] = head[v];
// head[v] = cnt++;
//
//}
//#include<iostream>
//#include<cstring>
//using namespace std;
//
//int visited[1010] = {0};
//int graph[1010][1010] = {0};
//
//void dfs(int node, int edgeSize);
//
//int main() {
//
// int nodeSize, edgeSize;
// int u,v;
// int cnt=0;
//
// cin >> nodeSize >> edgeSize;
//
// for (int i=0; i<edgeSize; i++) {
// cin >> u >> v;
// graph[u][v] = 1;
// graph[v][u] = 1;
// }
//
// for (int i=1; i<=nodeSize; i++) {
// for (int j=1; j<=nodeSize; j++) {
// if (!visited[j]) {
// // 노드가 연결되어 있으면~
//
//
// // graph[i][j] = 0;
//
// dfs(j, nodeSize);
// cnt++;
// // memset(visited,0,sizeof(visited));
//
//
// }
// }
// }
//
// cout << cnt << endl;
//
// return 0;
//}
//
//void dfs(int node, int nodeSize) {
// if (visited[node]) {
// return;
// }
//
// visited[node] = 1;
//
// for (int i=0; i<=nodeSize; i++) {
// if (graph[node][i]) {
// //graph[node][i] = 0;
// dfs(i, nodeSize);
// }
// }
//}
//#include<iostream>
//
//using namespace std;
//
//int Map[101][101] = {0};
//int visited[101][101] = {0};
//int cnt=0;
//
//void bfs(int waterNum, int Size, int row, int col);
//void resetVisited(int Size);
//
//int main() {
//
// int Size, maxArea[1000] = {0}, maxAreaIdx=0, maxNum;
// int maxHeight = 0, minHeight=101;
// cin >> Size;
//
// for (int i=0; i<Size; i++) {
// for (int j=0; j<Size; j++) {
// scanf("%d", &Map[i][j]);
// if (maxHeight<Map[i][j]) {
// maxHeight = Map[i][j];
// }
// if (Map[i][j]<minHeight) {
// minHeight = Map[i][j];
// }
// }
// }
//
//// for (int i=0; i<Size; i++) {
//// for (int j=0; j<Size; j++) {
//// printf("%d ", Map[i][j]);
//// }
//// cout<<endl;
//// }
//
//
// for (int k=minHeight-1; k<maxHeight; k++) {
// for (int i=0; i<Size; i++) {
// for (int j=0; j<Size; j++) {
// if (!visited[i][j] && Map[i][j]>k) {
// // cout <<"("<< i << " " << j << ") ";
// bfs(k,Size, i,j);
// cnt++;
// }
//
//
// }
// // cout << endl;
// }
// // cout << "물 & 안전구역: " << k << " " << cnt << endl;
// maxArea[maxAreaIdx] = cnt;
// maxAreaIdx++;
// resetVisited(Size);
// cnt = 0;
// }
//
// maxNum = maxArea[0];
// for (int i=1; i<maxAreaIdx; i++) {
// if (maxNum<maxArea[i]) {
// maxNum = maxArea[i];
// }
// }
//
// cout << maxNum << endl;
//
// return 0;
//}
//
//void resetVisited(int Size) {
// for (int i=0; i<Size; i++) {
// for (int j=0; j<Size; j++) {
// visited[i][j] = 0;
// }
// }
//}
//
//void bfs(int waterNum, int Size, int row, int col) {
// int q[20000][2] = {0}, f=1, r=0;
// int newRow, newCol;
// int dirr[4][2] = {
// {0, 1}, // 동
// {0, -1}, // 서
// {1, 0}, // 남
// {-1, 0} // 북
// };
//
// q[0][0] = row;
// q[0][1] = col;
// visited[row][col] = 1;
//
// while (r<f) {
// for (int i=0; i<4; i++) {
// newRow = q[r][0] + dirr[i][0];
// newCol = q[r][1] + dirr[i][1];
//
// if (newRow>=0 && newRow<Size && newCol>=0 && newCol<Size) {
// // 범위를 벗어나지 않는다면
//
// if (!visited[newRow][newCol] && Map[newRow][newCol]>waterNum) {
// // cout << "q의 i&j: " << newRow << " " << newCol << endl;
// q[f][0] = newRow;
// q[f][1] = newCol;
// f++;
// visited[newRow][newCol] = 1;
//
// }
// }
// }
// r++;
// }
//
//}




