题号:NC21348
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld
题目描述
牛牛有N张牌,每张牌上有一个数字,所有牌上的数字构成了一个完整的0到N-1的排列
现在牛牛将牌从左往右放在桌子上,第i张牌(从0开始)上面写的是i
牛牛想要调整牌的顺序使得第i张牌上面的数字是p[i]
调整策略如下
有N-1只兔子,兔子的标号为0到N-2,第i只兔子可以交换第i与i+1张牌
一个兔子的排列q[0],q[1]..q[N-2]被称为一个好排列当且仅当,按照这个排列的顺序让兔子们去交换牛牛的牌,操作结束后第i张牌恰好是p[i]
请问一共有多少的好排列,答案 对1e9+7取模
输入描述:
第一行输入一个整数N (2 ≤ N ≤ 50)
第二行输入N个整数表示0到N-1的一个排列
输出描述:
输出一个整数
示例5
输入
复制
20
1 3 0 5 2 7 4 8 10 6 12 9 14 11 16 13 18 15 19 17
备注:
子任务1: N <= 6
子任务2: N <= 10
子任务3: 无限制