from collections import deque
def bfs(v):
q = deque()
q.append(v)
visited[v] = 1
while q:
v = q.popleft()
for i in matrix[v]:
if visited[i] == 0:
q.append(i)
visited[i] = 1
dist[i] = dist[v] + 1
n, m, k, x = map(int, input().split())
matrix = [[] for _ in range(n+1)]
visited = [0]*(n+1)
dist = [0]*(n+1)
for _ in range(m):
a, b = map(int, input().split())
matrix[a].append(b)
bfs(x)
result = []
for i in range(1, len(dist)):
if dist[i] == k:
result.append(i)
result.sort()
if len(result) == 0:
print(-1)
else:
for i in result:
print(i)
아주 기본적인 그래프 문제로 bfs를 사용할 줄 알면 풀 수 있는 문제이다. dist라는 간선의 갯수를 세는 리스트를 하나 정의하고 x부터 bfs를 시작하여 visited[정점] == 0일때 dist[연결된 정점] = dist[연결된 다른 정점] + 1 해서 정점 x부터 bfs를 시작했을때의 간선의 갯수 dist를 구하여 그 값들 중 k와 같은 값들을 result에 append하여 결과값을 print한다.