#include <iostream>
#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> dir = {{1,0},{0,1},{-1,0},{0,-1}};
void dfs (vector<vector<int>> &arr,int rows,int cols,int cnt,int i,int j)
{
	queue<pair<int,int>> q;
	q.push({i,j});
	arr[i][j]==cnt;
	while(q.size()>0)
	{
		auto currPair = q.front();
		q.pop();
		int currI = currPair.first;
		int currJ = currPair.second;
		arr[currI][currJ]=cnt;
		for(int k=0;k<=3;k++)
		{
			int newI = currI + dir[k][0];
			int newJ = currJ + dir[k][1];
			if(newI>=0 && newI<rows && newJ>=0 && newJ<cols && arr[newI][newJ]==1)
			{
				q.push({newI,newJ});
			}
		}
	}
}

int findClosestIslandDistance(vector<vector<int>> arr)
{
	int rows = arr.size();
	int cols = arr[0].size();
	vector<vector<int>> dist (rows,vector<int>(cols,0));
	// mark all islands with identifier
	int cnt =1;
	for(int i=0;i<rows;i++)
	{
		for(int j=0;j<cols;j++)
		{
			if(arr[i][j]==1)
			{
				cnt++;
				dfs(arr,rows,cols,cnt,i,j);
			}
		}
	}
	
	for(int i=0;i<rows;i++)
	{
		for(int j=0;j<cols;j++)
		{
			cout<<arr[i][j]<<" ";
		}
		cout<<"\n";
	}
	queue<pair<int,int>> q;
	int minDist = INT_MAX;
	for(int i=0;i<rows;i++)
	{
		for(int j=0;j<cols;j++)
		{
			if(arr[i][j]>=2)
			{
				q.push({i,j});
			}
		}
		
	}
		while(q.size()>0)
	{
		auto currPair = q.front();
		q.pop();
		int currI = currPair.first;
		int currJ = currPair.second;
		for(int k=0;k<=3;k++)
		{
			int newI = currI + dir[k][0];
			int newJ = currJ + dir[k][1];
			if(newI>=0 && newI<rows && newJ>=0 && newJ<cols)
			{
				if(arr[newI][newJ]==0)
				{
					arr[newI][newJ] = arr[currI][currJ];
					dist[newI][newJ] = dist[currI][currJ]+1;
					q.push({newI,newJ});
				}
				else if(arr[newI][newJ] != arr[currI][currJ])
				{
					minDist = min(minDist,dist[currI][currJ] + dist[newI][newJ]);
				}
			}
		}
	}
	
	return minDist;
	
}

int main() {
	// your code goes here
vector<vector<int>> arr = {
        {1, 0, 0, 0, 0, 1},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {1, 0, 0, 0, 0, 1}
    };
	cout<<findClosestIslandDistance(arr);
}

/*
for(int key : mp.keyset())
{
	log .output (key,mp.get(key))
}

*/