5758: Sorting Permutations

内存限制:256 MB 时间限制:2 S
题面:传统 评测方式:文本比较 上传者:
提交:1 通过:1

题目描述

E. Sorting Permutations
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
We are given a permutation sequence a1,a2,...,an of numbers from 1 to n. Let's assume that in one second, we can choose some disjoint pairs (u1,v1),(u2,v2),...,(uk,vk) and swap all aui and avi for every i at the same time (1≤ui<vin). The pairs are disjoint if every ui and vj are different from each other.
We want to sort the sequence completely in increasing order as fast as possible. Given the initial permutation, calculate the number of ways to achieve this. Two ways are different if and only if there is a time t, such that the set of pairs used for swapping at that time are different as sets (so ordering of pairs doesn't matter). If the given permutation is already sorted, it takes no time to sort, so the number of ways to sort it is 1.
To make the problem more interesting, we have k holes inside the permutation. So exactly k numbers of a1,a2,...,an are not yet determined. For every possibility of filling the holes, calculate the number of ways, and print the total sum of these values modulo 1000000007 (109+7).
Input
The first line contains two integers n (1≤n≤105) and k (0≤k≤12). The second line contains the permutation sequence a1,...,an (0≤ain). If a number is not yet determined, it is denoted as 0. There are exactly k zeroes. All the numbers ai that aren't equal to zero are distinct.
Output
Print the total sum of the number of ways modulo 1000000007 (109+7).
Examples
Input
5 0
1 5 2 4 3
Output
6
Input
5 2
1 0 2 4 0
Output
7

输入样例 复制


输出样例 复制


分类标签