public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] lines = scanner.nextLine().split(",");
int n = (int) Math.sqrt(lines.length);
int[][] map = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
map[i][j] = Integer.parseInt(lines[i * n + j]);
}
}
System.out.println(maxDistance(map));
}
public static int maxDistance(int[][] grid) {
int n = grid.length;
int[] dx = {0, 0, 1, -1};
int[] dy = {1, -1, 0, 0};
Queue<int[]> queue = new ArrayDeque<>();
Set<int[]> visited = new HashSet<>();
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid.length; j++) {
if (grid[i][j] == 1) {
queue.offer(new int[]{i, j});
}
}
}
boolean hasZero = false;
int[] current = null;
while (!queue.isEmpty()) {
current = queue.poll();
int x = current[0];
int y = current[1];
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx < 0 || ny < 0 || nx >= n || ny >= n || grid[nx][ny] != 0) {
continue;
}
hasZero = true;
grid[nx][ny] = grid[x][y] + 1;
queue.offer(new int[]{nx, ny});
}
}
if (!hasZero || current == null) {
return -1;
}
return grid[current[0]][current[1]] - 1;
}