말
시간 제한2초메모리 제한256 MB
호환 그래프와 대기열 a가 주어질 때, a와 교환되는 최소 대기열 b를 사전순으로 구하고 각각의 해시 값을 998244353으로 나눈 나머지로 출력합니다.
문제
빅 호스(Big Horse)는 말의 신이다. 그에게는 서로 다른 종류의 말이 있다. 눈이 그리 좋지 않아서 같은 종류의 말은 구별하지 못한다.
이제 그는 마리의 말을 한 줄로 세우려고 한다. 말들은 마음대로 자리를 바꿀 수 있다. 다만 인접한 두 말은 두 말의 종류가 친구일 때만 자리를 바꿀 수 있다. 두 줄은 한쪽에서 유한 번의 자리 바꿈으로 다른 쪽에 도달할 수 있을 때, 그리고 그때에만 동등하다고 본다.
빅 호스에게는 줄 이 있다. 그는 이 줄의 왼쪽에 말을 더 세우고 싶지만, 왼쪽과 오른쪽을 구별하지 못한다. 그래서 가 와 교환 가능하도록 하는 줄 를 붙이려 한다. 즉, 이 와 동등해야 한다.
그는 극소인 줄 에만 관심이 있다. 구체적으로 다음 조건을 만족하는 를 찾는다.
- 는 와 교환 가능하다.
- 와 가 모두 와 교환 가능할 때, 는 와 동등하지 않다.
- 는 와 동등한 모든 줄 가운데 사전식 순서로 가장 앞선다.
극소인 줄은 많아야 개라고 한다. 이 줄들을 찾는 일을 도와 달라.
입력
첫 줄에 정수 ()이 주어진다.
이어서 개의 줄이 주어진다. 번째 줄에는 개의 정수가 있다. 이 줄의 번째 정수는 종류 의 말과 종류 의 말이 자리를 바꿀 수 있으면 , 아니면 이다.
다음 줄에는 정수 ()이 주어진다.
마지막 줄에는 줄에 선 말의 종류 이 주어진다 ().
출력
극소인 줄을 한 줄에 하나씩 출력한다. 줄이 매우 길 수 있으므로, 극소인 줄이 일 때 해시값 을 으로 나눈 나머지만 출력하면 된다.
극소인 줄은 사전식 순서로 출력한다. 해시를 계산하기 전에 먼저 정렬해야 한다.
힌트
예시에 나오는 극소인 줄은 과 이다.