import
java.util.*;
class
GFG {
static
List<List<Integer> >
chefAndWells(
int
n,
int
m, List<List<Character> > c)
{
List<List<Integer> > res =
new
ArrayList<>(n);
for
(
int
i =
0
; i < n; i++) {
List<Integer> row =
new
ArrayList<>(
Collections.nCopies(m, (
int
)1e9));
res.add(row);
}
Queue<
int
[]> q =
new
LinkedList<>();
for
(
int
i =
0
; i < n; i++) {
for
(
int
j =
0
; j < m; j++) {
if
(c.get(i).get(j) ==
'W'
) {
q.offer(
new
int
[] { i, j });
res.get(i).set(j,
0
);
}
}
}
int
[] dx = {
0
,
0
, -
1
,
1
};
int
[] dy = { -
1
,
1
,
0
,
0
};
while
(!q.isEmpty()) {
int
[] cur = q.poll();
int
curx = cur[
0
], cury = cur[
1
];
for
(
int
i =
0
; i <
4
; i++) {
int
x = curx + dx[i], y = cury + dy[i];
if
(x >=
0
&& x < n && y >=
0
&& y < m
&& c.get(x).get(y) !=
'N'
&& res.get(x).get(y)
> res.get(curx).get(cury) +
1
) {
q.offer(
new
int
[] { x, y });
res.get(x).set(
y, res.get(curx).get(cury) +
1
);
}
}
}
for
(
int
i =
0
; i < n; i++) {
for
(
int
j =
0
; j < m; j++) {
if
(c.get(i).get(j) ==
'.'
) {
res.get(i).set(j,
0
);
}
else
if
(res.get(i).get(j) == (
int
)1e9
&& c.get(i).get(j) !=
'N'
) {
res.get(i).set(j, -
1
);
}
else
if
(res.get(i).get(j) == (
int
)1e9
&& c.get(i).get(j) !=
'H'
) {
res.get(i).set(j,
0
);
}
else
{
res.get(i).set(j,
res.get(i).get(j) *
2
);
}
}
}
return
res;
}
public
static
void
main(String[] args)
{
int
n =
3
, m =
3
;
List<List<Character> > c =
new
ArrayList<>();
c.add(Arrays.asList(
'H'
,
'H'
,
'H'
));
c.add(Arrays.asList(
'H'
,
'W'
,
'H'
));
c.add(Arrays.asList(
'H'
,
'H'
,
'H'
));
List<List<Integer> > ans = chefAndWells(n, m, c);
for
(
int
i =
0
; i < n; i++) {
for
(
int
j =
0
; j < m; j++) {
System.out.print(ans.get(i).get(j) +
" "
);
}
System.out.println();
}
}
}