#include <iostream>
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> dir = {{0,1},{1,0},{-1,0},{0,-1}};
void performbfs (vector<vector<int>> & arr ,vector<vector<int>> & owner,int i,int j,int x)
{
queue<pair<int,int>> q;
q.push({i,j});
owner[i][j]=x;
while(q.size()!=0)
{
auto it = q.front();
q.pop();
int currI = it.first;
int currJ = it.second;
for(int k=0;k<4;k++)
{
int newI = currI + dir[k][0];
int newJ = currJ + dir[k][1];
if(newI>=0 && newI<arr.size() && newJ >=0 && newJ <arr[0].size() && arr[newI][newJ]==1 && owner[newI][newJ]==0)
{
owner[newI][newJ]=x;
q.push({newI,newJ});
}
}
}
}
int findminDist ( vector<vector<int>> &arr)
{
int rows = arr.size();
int cols = arr[0].size();
vector<vector<int>> owner (rows,vector<int>(cols,0));
int x= 1;
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(arr[i][j]==1 && owner[i][j]==0)
{
performbfs(arr,owner,i,j,x);
x++;
}
}
}
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
cout<<owner[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
int main() {
// your code goes here
vector<vector<int>> arr = {{1, 0, 0, 0, 1},
{1, 1, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 1, 1, 1}};
int dis = findminDist (arr);
cout<<dis;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3Rvcjx2ZWN0b3I8aW50Pj4gZGlyID0ge3swLDF9LHsxLDB9LHstMSwwfSx7MCwtMX19OwoKdm9pZCBwZXJmb3JtYmZzICh2ZWN0b3I8dmVjdG9yPGludD4+ICYgYXJyICx2ZWN0b3I8dmVjdG9yPGludD4+ICYgb3duZXIsaW50IGksaW50IGosaW50IHgpCnsKCQoJcXVldWU8cGFpcjxpbnQsaW50Pj4gcTsKCXEucHVzaCh7aSxqfSk7Cglvd25lcltpXVtqXT14OwoJd2hpbGUocS5zaXplKCkhPTApCgl7CgkJYXV0byBpdCA9IHEuZnJvbnQoKTsKCQlxLnBvcCgpOwoJCWludCBjdXJySSA9IGl0LmZpcnN0OwoJCWludCBjdXJySiA9IGl0LnNlY29uZDsKCQlmb3IoaW50IGs9MDtrPDQ7aysrKQoJCXsKCQkJaW50IG5ld0kgPSBjdXJySSArIGRpcltrXVswXTsKCQkJaW50IG5ld0ogPSBjdXJySiArIGRpcltrXVsxXTsKCQlpZihuZXdJPj0wICYmIG5ld0k8YXJyLnNpemUoKSAmJiBuZXdKID49MCAmJiBuZXdKIDxhcnJbMF0uc2l6ZSgpICYmIGFycltuZXdJXVtuZXdKXT09MSAmJiBvd25lcltuZXdJXVtuZXdKXT09MCkKCQl7CgkJCW93bmVyW25ld0ldW25ld0pdPXg7CgkJCXEucHVzaCh7bmV3SSxuZXdKfSk7CgkJfQoJCQoJCX0KCX0KfQoKaW50IGZpbmRtaW5EaXN0ICgJdmVjdG9yPHZlY3RvcjxpbnQ+PiAmYXJyKQp7CglpbnQgcm93cyA9IGFyci5zaXplKCk7CglpbnQgY29scyA9IGFyclswXS5zaXplKCk7Cgl2ZWN0b3I8dmVjdG9yPGludD4+IG93bmVyIChyb3dzLHZlY3RvcjxpbnQ+KGNvbHMsMCkpOwoJaW50IHg9IDE7Cglmb3IoaW50IGk9MDtpPHJvd3M7aSsrKQoJewoJCWZvcihpbnQgaj0wO2o8Y29scztqKyspCgkJewoJCQlpZihhcnJbaV1bal09PTEgJiYgb3duZXJbaV1bal09PTApCgkJCXsKCQkJCXBlcmZvcm1iZnMoYXJyLG93bmVyLGksaix4KTsKCQkJCXgrKzsKCQkJfQoJCX0KCX0KCWZvcihpbnQgaT0wO2k8cm93cztpKyspCgl7CgkJZm9yKGludCBqPTA7ajxjb2xzO2orKykKCQl7CgkJCWNvdXQ8PG93bmVyW2ldW2pdPDwiICI7CgkJfQoJCWNvdXQ8PCJcbiI7Cgl9CglyZXR1cm4gMDsKCQp9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXZlY3Rvcjx2ZWN0b3I8aW50Pj4gYXJyID0ge3sxLCAwLCAwLCAwLCAxfSwgIAp7MSwgMSwgMCwgMCwgMH0sICAKezAsIDAsIDAsIDAsIDB9LCAgCnswLCAwLCAxLCAxLCAxfX07CmludCBkaXMgPSBmaW5kbWluRGlzdCAoYXJyKTsKY291dDw8ZGlzOwpyZXR1cm4gMDsKfQ==