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