사탕 골고루 먹기
시간 제한1초메모리 제한512 MB
같은 종류의 사탕이 연달아 나오지 않도록 배열합니다. 사전순으로 가장 작은 순서를 찾아 i와 Z[i]의 곱의 합을 987654323으로 나눈 나머지를 구하고, 불가능하면 IMPOSSIBLE을 출력합니다.
문제
Bob은 가지 종류의 사탕을 여러 개 가지고 있다. 사탕은 1번부터 번까지 번호가 붙어 있고, 번 사탕은 개 있다. 를 사탕의 총 개수라 하자.
Bob은 오늘 가진 사탕을 모두 먹기로 했다. 단, 놀이를 하면서 먹는다.
- 같은 종류의 사탕을 연속으로 먹지 않는다. 골고루 먹는 편이 더 맛있을 것 같기 때문이다.
- 위 조건을 만족하며 사탕을 먹는 방법이 여럿이면, 사전순으로 가장 앞서는 방법을 택한다. 총 개의 사탕을 먹는 방법은 길이가 인 정수 배열로 나타낼 수 있으며, 각 원소의 값은 사탕의 번호이다. 두 방법 와 가 있을 때, 처음으로 다른 위치를 라 하자. 즉, 인 모든 에 대해 이지만 인 위치이다. 이면 가 보다 사전순으로 앞선다. 이면 가 보다 앞선다. 두 정수 와 는 수의 크기로 비교한다. 예를 들어 이고 이면 이다.
예를 들어 , 라 하자. 이때 1번 조건을 만족하며 사탕을 모두 먹는 방법은 2가지이다.
- 방법 1:
- 방법 2: 이 중 방법 1이 사전순으로 앞선다.
다른 예로, , 라 하자. 이때 1번 조건을 만족하며 사탕을 모두 먹는 방법은 3가지이다. 사전순으로 정렬되어 있다.
- 방법 1:
- 방법 2:
- 방법 3:
입력으로 과 값들이 주어졌을 때, Bob이 위 조건을 만족하며 모든 사탕을 먹을 수 있는지 알아보자. 먹을 수 있다면, 사전순으로 가장 앞서는 방법을 나타내는 길이 인 정수 배열을 라 하고, 의 값을 구한다. 이 값이 매우 커질 수 있으므로 으로 나눈 나머지를 출력한다.
입력
첫 줄에 테스트 케이스의 수 가 주어진다. 각 테스트 케이스는 두 줄로 주어진다.
첫째 줄에 사탕의 종류 이 주어지며, 둘째 줄에 공백으로 구분된 개의 정수가 주어진다.
출력
각 테스트 케이스의 정답을 한 줄에 하나씩 출력한다.
조건을 만족하며 사탕을 모두 먹을 수 없는 경우 IMPOSSIBLE을 출력한다 (따옴표 제외).