Photo by Pietro Mattia on Unsplash
from collections import deque
row, col = map(int, input().split())
map_ =[]
for _ in range(row):
map_.append(list(map(int, ' '.join(input()).split())))
visited = [[0]*col for _ in range(row)]
dx = [1, -1 ,0 ,0]
dy = [0, 0, 1, -1]
stack = deque()
stack.append((0,0,1))
visited[0][0] = 1
while stack:
y,x,dist = stack.popleft()
visited[y][x] = 1
for i in range(4):
ny = y + dy[i]
nx = x + dx[i]
if 0<=nx<col and 0<=ny<row and visited[ny][nx] == 0 and map_[ny][nx] == 1:
map_[ny][nx] = dist+1
stack.append((ny,nx,dist+1))
print(map_[row-1][col-1])
n, m, start = map(int, input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
from_, to_= map(int, input().split())
graph[from_].append(to_)
graph[to_].append(from_)
def dfs(graph, start, visited=[]):
visited.append(start)
for node in sorted(graph[start]):
if node not in visited:
dfs(graph, node, visited)
return visited
def bfs(graph, start):
stack = []
visited = [start]
stack.append(start)
while stack:
node_now = stack.pop(0)
for node in sorted(graph[node_now]):
if node not in visited:
visited.append(node)
stack.append(node)
return visited
print(*dfs(graph, start,[]))
print(*bfs(graph,start))