μ°λ¦¬ λλΌλ κ°μ‘± νΉμ μΉμ²λ€ μ¬μ΄μ κ΄κ³λ₯Ό μ΄μλΌλ λ¨μλ‘ νννλ λ νΉν λ¬Ένλ₯Ό κ°μ§κ³ μλ€. μ΄λ¬ν μ΄μλ λ€μκ³Ό κ°μ λ°©μμΌλ‘ κ³μ°λλ€. κΈ°λ³Έμ μΌλ‘ λΆλͺ¨μ μμ μ¬μ΄λ₯Ό 1μ΄μΌλ‘ μ μνκ³ μ΄λ‘λΆν° μ¬λλ€ κ°μ μ΄μλ₯Ό κ³μ°νλ€. μλ₯Ό λ€λ©΄ λμ μλ²μ§, μλ²μ§μ ν μλ²μ§λ κ°κ° 1μ΄μΌλ‘ λμ ν μλ²μ§λ 2μ΄μ΄ λκ³ , μλ²μ§ νμ λ€κ³Ό ν μλ²μ§λ 1μ΄, λμ μλ²μ§ νμ λ€κ³Όλ 3μ΄μ΄ λλ€.
μ¬λ¬ μ¬λλ€μ λν λΆλͺ¨ μμλ€ κ°μ κ΄κ³κ° μ£Όμ΄μ‘μ λ, μ£Όμ΄μ§ λ μ¬λμ μ΄μλ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
μ¬λλ€μ 1, 2, 3, …, n (1 ≤ n ≤ 100)μ μ°μλ λ²νΈλ‘ κ°κ° νμλλ€. μ λ ₯ νμΌμ 첫째 μ€μλ μ 체 μ¬λμ μ nμ΄ μ£Όμ΄μ§κ³ , λμ§Έ μ€μλ μ΄μλ₯Ό κ³μ°ν΄μΌ νλ μλ‘ λ€λ₯Έ λ μ¬λμ λ²νΈκ° μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ μ μ§Έ μ€μλ λΆλͺ¨ μμλ€ κ°μ κ΄κ³μ κ°μ mμ΄ μ£Όμ΄μ§λ€. λ·μ§Έ μ€λΆν°λ λΆλͺ¨ μμκ°μ κ΄κ³λ₯Ό λνλ΄λ λ λ²νΈ x,yκ° κ° μ€μ λμ¨λ€. μ΄λ μμ λμ€λ λ²νΈ xλ λ€μ λμ€λ μ μ yμ λΆλͺ¨ λ²νΈλ₯Ό λνλΈλ€.
κ° μ¬λμ λΆλͺ¨λ μ΅λ ν λͺ λ§ μ£Όμ΄μ§λ€.
μΆλ ₯
μ λ ₯μμ μꡬν λ μ¬λμ μ΄μλ₯Ό λνλ΄λ μ μλ₯Ό μΆλ ₯νλ€. μ΄λ€ κ²½μ°μλ λ μ¬λμ μΉμ² κ΄κ³κ° μ ν μμ΄ μ΄μλ₯Ό κ³μ°ν μ μμ λκ° μλ€. μ΄λμλ -1μ μΆλ ₯ν΄μΌ νλ€.
π§ νμ΄
μμ λ¬Έμ λ κ·Έλν λ¬Έμ μ΄λ€.
Nμ μ¬λ μλ₯Ό μ λ ₯ λ°κ³ , μλ‘ λ€λ₯Έ λ μ¬λμ λ²νΈ A, Bλ₯Ό μ λ ₯ λ°λλ€. λΆλͺ¨-μμλ€ μ¬μ΄μ κ΄κ³ κ°μ Mκ³Ό Mκ°μ μ€μ κ±Έμ³ x, yλ₯Ό μ λ ₯ λ°λλ€. μ΄ λ xλ yμ λΆλͺ¨μ΄λ€.
μ°λ¦¬κ° ꡬν΄μΌ ν κ²μ Aμ Bμ μ΄μλ₯Ό λνλ΄λ μ μμ΄λ€.
κ°μ€μΉκ° λͺ¨λ 1μΈ κ·Έλνμ΄λ€. (μ¬μ€ νμ νμλ‘ κ³μ°ν΄λ λλ€.) λλ DFS(μ¬κ·)λ₯Ό μ¬μ©νλ€.
1. μ λ ₯μΌλ‘ κ·Έλν λ§λ€κΈ° (리μ€νΈ)
2. νμνκΈ° (vμ Bκ° κ°μΌλ©΄ resμ νμ¬ num λν΄μ€λ€)
3. resμ μ무κ²λ μμΌλ©΄(κΈΈμ΄κ° 0μ΄λΌλ©΄) -1μ λ°ννλ€.
N = int(input())
A, B = map(int, input().split())
M = int(input())
graph = [[] for _ in range(N+1)]
res = []
for _ in range(M) :
x, y = map(int, input().split())
graph[x].append(y)
graph[y].append(x)
visited = [False] * (N+1)
def dfs(v, num) :
num += 1
visited[v] = True
if v == B :
res.append(num)
for i in graph[v] :
if not visited[i] :
dfs(i, num)
dfs(A,0)
if len(res) == 0 :
print(-1)
else :
print(res[-1]-1)