항공편 계획

시간 제한1초메모리 제한512 MB

요약
각 공항이 목적지 목록 또는 목적지가 아닌 공항 목록을 제시할 때, s에서 t까지 필요한 최소 항공편 수를 구한다.
난이도

보통10점 중 7점

유형
그래프, BFS, 구현, 해시맵
정답자
아직 제출이 없습니다

문제

아마 알고 있겠지만, 항공권 가격은 때때로 놀랄 만큼 복잡하다. 예를 들어 두 공항 사이를 직항으로 가는 것보다 여러 구간을 거치는 훨씬 긴 항공편이 더 저렴한 경우가 자주 있다. 가격이 복잡해 보이는 이유 중 하나는 항공사가 가격이 정해지는 방식을 일부러 불분명하게 만들어 고객이 더 비싼 항공편을 선택하도록 유도하기 때문이다.

한 항공사는 이런 불투명함을 한 단계 더 밀어붙이기로 했다. 항공편 자동 검색 기능조차 제공하지 않는다. 대신 항공편을 아주 독특한 형식으로 설명한다. NN개의 공항(번호는 00부터 N−1N - 1까지) 각각에 대해 다음 중 하나를 나열한다.

  • 이 공항에서 출발해 갈 수 있는 공항, 또는
  • 이 공항에서 출발해 갈 수 없는 공항.

이런 복잡함을 보상하듯, 항공사는 두 공항 사이를 잇는 모든 직항 항공편의 가격을 같은 금액으로 정한다.

항공사가 제공하는 모든 항공편의 설명이 주어졌을 때, 공항 ss에서 공항 tt까지 가는 데 필요한 최소 항공편 수를 구하는 프로그램을 작성하라.

입력

첫째 줄에는 공항의 수 NN (1≤N≤1051 \le N \le 10^5)과 두 정수 ss, tt가 주어진다 (0≤s,t<N0 \le s, t < N, s≠ts \neq t).

다음 NN개 줄은 공항 00부터 시작하여 각 공항의 출발 항공편을 설명한다. 줄은 문자 하나로 시작한다. 이 문자가 N이면 이 공항에서 갈 수 있는 모든 도착 공항의 목록이 주어진다. 이 문자가 C이면 이 공항에서 갈 수 없는 모든 공항의 목록이 주어진다.

문자 뒤에는 목록에 있는 공항의 수 mm이 정수로 주어진다. 마지막으로 줄에 mm개의 서로 다른 수 aia_i (0≤ai<N0 \le a_i < N)가 주어지며, 이는 목록에 있는 공항이다.

모든 공항에 대한 mm의 합은 2⋅1052 \cdot 10^5 이하이다.

출력

공항 ss에서 공항 tt까지 가는 데 필요한 최소 항공편 수를 정수 하나로 출력한다.

경로가 없으면 "impossible"을 출력한다.

예제2

  1. 예제 1

    입력
    4 0 1
    N 1 2
    C 1 2
    N 1 3
    C 1 1
    
    예상 출력
    impossible
    
  2. 예제 2

    입력
    4 0 1
    N 1 2
    C 1 2
    N 1 3
    C 1 0
    
    예상 출력
    3