만드는 중입니다

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

그래미 정렬

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

요약
정점에 수가 적힌 연결 그래프에서 A에서 시작하는 단순 경로의 값을 회전시켜, 모든 정점이 A에서 B까지 증가하는 경로에 포함되도록 만들 수 있는지 판단합니다. 가능하면 연산 10000번 이내의 방법을 출력합니다.
난이도

어려움10점 중 10점

유형
그래프, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

그래미는 정점 nn개로 이루어진 연결된 무방향 그래프 GG를 가지고 있다. 정점은 1,2,…,n1, 2, \ldots, n으로 번호가 매겨져 있다. 그중 두 정점 AA와 BB는 특별한 정점이다. 각 정점 ii에는 수 p_ip\_i가 적혀 있고, p_1,p_2,…,p_np\_1, p\_2, \ldots, p\_n은 1,2,…,n1, 2, \ldots, n의 순열이다.

그래미는 정점에 적힌 수들이 너무 뒤죽박죽이라고 생각한다. 그래서 각 정점 xx에 대해 다음 조건을 모두 만족하는 경로가 존재하도록 수들을 재배열하려고 한다.

  • 경로는 AA에서 시작해서 BB에서 끝난다.
  • 경로는 정점 xx를 지난다.
  • 경로를 따라 적힌 수가 엄격하게 증가한다.

한 번의 연산에서 그래미는 AA에서 시작해 임의의 정점에서 끝나는 단순 경로만 고를 수 있다. 그다음 그 경로 위의 수들을 시작점 방향으로 한 칸씩 당기고, 맨 앞의 수는 맨 뒤로 보낸다. 정식으로 말하면, 선택한 단순 경로의 정점에 시작부터 끝까지 a1,a2,…,ak−1,aka_1, a_2, \ldots, a_{k-1}, a_k가 적혀 있다면, 연산 후에는 이 정점들에 a2,a3,…,ak,a1a_2, a_3, \ldots, a_k, a_1이 적힌다.

그래미는 연산을 최대 10 00010\,000번까지만 할 수 있다. 요구한 대로 수를 재배열할 수 있는지 판단하고, 가능하다면 해법을 출력하라.

입력

첫 줄에 네 개의 정수 nn, mm, AA, BB (2≤n≤10002 \leq n \leq 1000, 1≤m≤20001 \leq m \leq 2000, 1≤A,B≤n1 \leq A, B \leq n, A≠BA \neq B)가 주어진다.

둘째 줄에는 nn개의 정수 p_1,p_2,…,p_np\_1, p\_2, \ldots, p\_n (1≤p_i≤n1 \leq p\_i \leq n)이 주어진다. p_1,p_2,…,p_np\_1, p\_2, \ldots, p\_n은 순열임이 보장된다.

이어지는 mm개의 줄에는 각각 두 정수 u_iu\_i와 v_iv\_i (1≤u_i,v_i≤n1 \leq u\_i, v\_i \leq n, u_i≠v_iu\_i \neq v\_i)가 주어지며, 이는 u_iu\_i와 v_iv\_i 사이에 양방향 간선이 있다는 뜻이다. 그래프는 연결되어 있으며, 임의의 두 정점 사이에 간선은 최대 하나만 있다.

출력

요구한 대로 수를 재배열할 수 없다면 -1을 출력한다.

그렇지 않다면 첫 줄에 연산 횟수 opop (0≤op≤10 0000 \leq op \leq 10\,000)를 출력한다. 이어지는 opop개의 줄에는 선택한 단순 경로의 정점 수 kk를 출력하고, 이어서 경로의 정점 x1,x2,…,xkx_1, x_2, \ldots, x_k (x1=Ax_1 = A, 1≤xi≤n1 \leq x_i \leq n)를 출력한다. xix_i는 서로 달라야 하며, GG에서 경로를 이루어야 한다.

opop를 최소화할 필요는 없다. 여러 해가 있다면 그중 아무것이나 출력하면 된다.

예제2

  1. 예제 1

    입력
    5 6 1 2
    1 2 3 4 5
    1 3
    2 3
    1 4
    2 4
    1 5
    3 5
    
    예상 출력
    7
    4 1 3 2 4
    3 1 3 2
    3 1 3 5
    4 1 3 2 4
    3 1 3 2
    2 1 3
    1 1
    
  2. 예제 2

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