만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

두 경로

시간 제한5초메모리 제한1024 MB

요약
방향 비순환 그래프에서 A에서 B로 가는 경로와 C에서 D로 가는 경로를 간선이 겹치지 않게 골라 총 길이가 가장 짧은 쌍을 찾습니다. 그런 쌍이 없으면 NO를 출력합니다.
난이도

보통10점 중 7점

유형
그래프, 최단 경로, 위상 정렬
정답자
아직 제출이 없습니다

문제

정점의 고정 쌍 (A,B)(A, B)와 (C,D)(C, D)가 주어진 방향 비순환 그래프가 있다. AA에서 BB로 가는 단순 경로와 CC에서 DD로 가는 단순 경로로 이루어진 쌍 중, 두 경로가 간선을 공유하지 않는 모든 경우를 고려한다. 두 경로 길이의 합이 최소인 쌍을 찾는다.

입력

첫 줄에 정점 수 nn과 간선 수 mm이 주어진다 (1≤n≤50001 \le n \le 5000, 0≤m≤20 0000 \le m \le 20\,000). 다음 mm개의 줄에는 uu에서 vv로 가는 간선이 있음을 뜻하는 정수 uu와 vv가 주어진다 (1≤u,v≤n1 \le u, v \le n). 이 그래프에는 자기 자신으로 가는 간선, 중복 간선, 사이클이 없다. 마지막 줄에는 고정 정점 AA, BB, CC, DD가 이 순서대로 주어진다 (1≤A,B,C,D≤n1 \le A, B, C, D \le n).

출력

두 경로의 쌍이 존재하지 않으면 NO 한 줄만 출력한다. 존재하면 첫 줄에 YES를 출력하고, 이어서 AA에서 BB로 가는 경로, CC에서 DD로 가는 경로를 차례로 출력한다. 각 경로는 두 줄로 출력한다. 첫 줄에는 경로의 정점 수를, 둘째 줄에는 방문 순서대로 정점 번호를 쓴다. 각 경로는 단순 경로여야 하므로, 같은 경로 안에서 한 정점을 두 번 이상 방문하지 않는다. 답이 여러 개이면 그중 아무거나 출력한다.

예제2

  1. 예제 1

    입력
    4 3
    1 2
    2 3
    3 4
    1 2 3 4
    
    예상 출력
    YES
    2
    1 2
    2
    3 4
    
  2. 예제 2

    입력
    4 3
    1 2
    2 3
    3 4
    1 3 2 4
    
    예상 출력
    NO