CF1761F1 Anti-median (Easy Version)

题目描述

这是该问题的简单版本。两个版本的唯一区别在于 $n$ 的约束条件。只有在所有版本的问题都被解决后,你才能进行 hack。 我们称一个长度为 $2m+1$($m \ge 1$)的数组 $a$ 是“坏的”,如果元素 $a_{m+1}$ 等于该数组的中位数。换句话说,如果将数组排序后,第 $m+1$ 个位置上的元素没有变化,则该数组是坏的。 我们称从 $1$ 到 $n$ 的一个排列 $p$ 是“反中位数排列”,如果它的每一个长度不小于 $3$ 的奇数长度子数组都不是坏的。 你已经得到了排列中某些元素的值。请你计算有多少种方式可以填补未知的值,使得得到一个反中位数排列。由于答案可能很大,请输出对 $10^9+7$ 取模后的结果。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来是每个测试用例的描述。 每个测试用例的第一行包含一个整数 $n$($2 \le n \le 1000$),表示排列的长度。 第二行包含 $n$ 个整数 $p_1, p_2, \ldots, p_n$($1 \le p_i \le n$ 或 $p_i = -1$),表示排列的元素。如果 $p_i \neq -1$,则该位置的值已知,否则未知。保证对于任意 $i \neq j$,如果 $p_i \neq -1$ 且 $p_j \neq -1$,则 $p_i \neq p_j$。 保证所有测试用例中 $n^2$ 的总和不超过 $10^6$。

输出格式

对于每个测试用例,输出一个整数,表示可以填补未知值得到反中位数排列的方案数,对 $10^9+7$ 取模。

说明/提示

在第一个测试用例中,$[1, 2]$ 和 $[2, 1]$ 都是反中位数排列。 在第二个测试用例中,排列 $[1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2]$ 都是反中位数排列。剩下的两个排列 $[1, 2, 3]$ 和 $[3, 2, 1]$ 本身就是坏数组,因为它们的中位数 $2$ 在中间。 在第三个测试用例中,$[1, 2, 3, 4]$ 不是反中位数排列,因为它包含了坏子数组 $[1, 2, 3]$。 在第四个测试用例中,唯一可以得到的反中位数排列是 $[5, 6, 3, 4, 1, 2]$。 由 ChatGPT 4.1 翻译