픽셀 셔플
시간 제한2초메모리 제한1024 MB
n x n 픽셀 격자에 적용되는, 32개 이하의 이름 붙은 변환으로 만들어진 순열이 주어질 때, 원래 영상으로 돌아오는 가장 작은 양의 거듭제곱을 구한다.
문제

비트맵 이미지의 픽셀을 뒤섞으면 무작위처럼 보이는 그림이 만들어질 수 있습니다. 하지만 같은 방식으로 충분히 여러 번 뒤섞으면 결국 원래 이미지가 다시 나타납니다. 이는 놀라운 일이 아닙니다. "섞기(shuffle)"란 이미지를 이루는 유한개의 칸에 대한 일대일 대응(순열)이므로, 이를 반복하면 반드시 처음 상태로 돌아오기 때문입니다.
프로그램은 정수 과, 이미지에 대한 섞기 를 정의하는 기본 변환들의 목록을 읽습니다. 그런 다음 를 정확히 번 적용하면 항상 원래의 이미지가 되는 가장 작은 정수 ()을 구해야 합니다.
예를 들어 가 반시계 방향 회전이라면 입니다.

입력
입력은 두 줄로 이루어집니다.
첫 번째 줄에는 정수 이 주어집니다 (, 은 짝수). 이미지는 픽셀 행렬 로 저장되며, 는 행 번호, 는 열 번호입니다. 왼쪽 위 픽셀의 위치는 행 , 열 입니다.
두 번째 줄에는 공백으로 구분된, 비어 있지 않은 최대 개의 단어 목록이 주어집니다. 유효한 단어는 키워드 id, rot, sym, bhsym, bvsym, div, mix 중 하나이며, 뒤에 -가 붙을 수 있습니다. 각 키워드 key는 (아래 그림 1에서 정의된) 기본 변환을 나타내고, key-는 key의 역변환을 나타냅니다. 예를 들어 rot-는 반시계 방향 회전의 역변환, 즉 시계 방향 회전입니다.
목록 는 합성 변환 를 나타냅니다. 즉, 를 가장 먼저 적용하고 을 가장 나중에 적용합니다. 예를 들어 bvsym rot-는 먼저 시계 방향 회전을 수행한 뒤, 이미지의 아래쪽 절반에 대해 상하 대칭을 적용합니다.

각 기본 변환은 이미지 를 다음과 같이 이미지 로 바꿉니다.
그림 1: 각 변환이 이미지 를 이미지 로 바꾸는 방식.
출력
이 항등변환이 되는 가장 작은 정수 ()을 한 줄에 출력합니다. 모든 입력에 대해 이라고 가정해도 됩니다.






