각 k(1 이상 n-1 이하)마다 A에서 정확히 k번 교환해 얻을 수 있는 순열의 개수를 10^9+7로 나눈 나머지를 구한다.
111부터 nnn까지의 수가 한 번씩 등장하는 크기 nnn짜리 순열을 생각한다.
교환 연산은 서로 다른 두 위치에 있는 수를 맞바꾸는 것이다. 한 순열에 교환 연산을 여러 번 적용해서 다른 순열을 만들 수 있고, 같은 자리를 여러 번 건드려도 된다.
순열 AAA가 주어진다. 1≤k≤n−11 \le k \le n-11≤k≤n−1인 각 kkk에 대해, 교환 연산을 정확히 kkk번 써서 AAA를 만들 수 있는 순열이 몇 개인지 세는 프로그램을 작성하시오. 연산 횟수는 kkk번보다 적어도 안 되고 많아도 안 된다. 같은 순열은 한 번만 센다.
첫째 줄에 nnn이 주어진다. (2≤n≤1052 \le n \le 10^52≤n≤105)
둘째 줄에 순열 AAA를 이루는 nnn개의 정수가 공백으로 구분되어 주어진다.
한 줄에 n−1n-1n−1개의 수를 공백으로 구분해 출력한다. iii번째 수는 교환 연산을 정확히 iii번 써서 AAA를 만들 수 있는 서로 다른 순열의 개수를 109+710^9+7109+7로 나눈 나머지이다.
n=3n = 3n=3이고 A=(3,1,2)A = (3, 1, 2)A=(3,1,2)인 경우를 보자.
(1,3,2)(1, 3, 2)(1,3,2), (2,1,3)(2, 1, 3)(2,1,3), (3,2,1)(3, 2, 1)(3,2,1)은 교환 연산을 한 번 써서 (3,1,2)(3, 1, 2)(3,1,2)가 된다.
(3,1,2)(3, 1, 2)(3,1,2), (2,3,1)(2, 3, 1)(2,3,1), (1,2,3)(1, 2, 3)(1,2,3)은 교환 연산을 두 번 써서 (3,1,2)(3, 1, 2)(3,1,2)가 된다.