#P7252. [2019年雅礼]sort

    ID: 7086 传统题 1000ms 512MiB 尝试: 4 已通过: 2 难度: 9 上传者: 标签>CF2600组合数学动态规划并查集枚举排序

[2019年雅礼]sort

Sort

时间限制: 1s
空间限制: 512M

Description

对于一个 11nn 的排列 PP,你可以进行若干次如下操作:

  • 选择若干对位置,满足每个位置最多在一个位置对中,然后对每一对位置,交换这两个位置上元素的值。

f(P)f(P) 为将 PP 排成升序所需的最少操作数,g(P)g(P) 为以最小操作数将 PP 排成升序的方案数。两种方案被认为是不同的,当且仅当对于某次操作,存在一个位置 ii,在两种方案中与 ii 处于同一个位置对的另一个位置不同;或者 ii 在一种方案中存在于一个位置对中,而在另一个方案中非然。

现在给出一个不完整的排列 AA,其中有 kk 个元素未知。你需要对于 k!k! 种可能的排列 AA,算出这些排列 f(A)f(A) 的和以及 g(A)g(A) 的和。由于 g(A)g(A) 的和可能很大,你只需输出对 109+710^9 + 7 取模的结果。

Input

第一行两个整数 n,kn, k

第二行 nn 个整数,表示排列 AA,其中有 kk 个整数为 00,表示这个位置上的值未知。

Output

第一行一个整数,表示所有可能的排列的 f()f() 的和。

第二行一个整数,表示所有可能的排列的 g()g() 的和对 109+710^9 + 7 取模的结果。

Sample

Input

5 2
1 0 2 4 0

Output

3
7

Explanation

对于排列 A1=[1,3,2,4,5]A_1 = [1, 3, 2, 4, 5], f(A1)=1,g(A1)=1f(A_1) = 1, g(A_1) = 1
对于排列 A2=[1,5,2,4,3]A_2 = [1, 5, 2, 4, 3], f(A2)=2,g(A2)=6f(A_2) = 2, g(A_2) = 6

Subtasks

对所有数据,保证 $1 \leq n \leq 10^5, 0 \leq k \leq \min\{12, n\}, 0 \leq A_i \leq n$。

  • Subtask1 (18%):k=0,n8k = 0, n \leq 8
  • Subtask2–5 (45%):k=0k = 0,且存在某个非负整数 d<nd < n,满足 Ai=(i+d1)modn+1A_i = (i + d - 1) \mod n + 1。其中:
    • Subtask2 (3%):d=0d = 0
    • Subtask3 (8%):n,dn, d 互质;
    • Subtask4 (13%):d=2,nd = 2, n 为偶数;
    • Subtask5 (21%):没有额外的约束;
  • Subtask6 (11%):k=0k = 0
  • Subtask7 (17%):k8k \leq 8
  • Subtask8 (9%):没有特殊的约束。