小 $L$ 在努力学习的同时,还很注重生活,养盆栽是他日常消遣之一。
就在一个月前,小 $L$ 新增了一些盆栽幼苗,并把他们排成 $r$ 行 $c$ 列的阵列。但小 $L$ 发现,一个月后,这些盆栽有的长得快长得高,有的长得慢长得矮,参差不齐。小 $L$ 觉得这会使得部分盆栽得不到充足的阳光,于是小 $L$ 决定把某些行某些列的盆栽移到别的地方。
小 $L$ 测量了 $r\times c$ 个盆栽的高度,从低到高依次编号 $1$ 至 $r\times c$。然后小 $L$ 定义,某一行或者某一列是单调的,当且仅当这一行或者这一列上的所有盆栽的高度,依次从小到大或者从大到小排列。若 $r$ 行 $c$ 列的阵列,每一行以及每一列都是单调的,则整个阵列都是单调的。小 $L$ 认为,单调的阵列会使得每一个盆栽总能在一天的某个时段沐浴到充足的阳光。
现在小L准备从 $r$ 行 $c$ 列中选定某些行某些列,把选定的行和列上的所有盆栽都移走(不能全部移走)。若选定了其中的 $r_1$ 行 $c_1$ 列,则剩下的盆栽会形成 $(r - r_1) \times (c – c_1)$ 的阵列。小 $L$ 好奇,共有多少种移动方案,使得剩下的阵列是单调的。
注明:提交语言有 C 和 C++ 两种,默认为 C,如果要使用 C++ 提交,请手动切换。
输入数据第一行包含两个整数,$r$ 和 $c(1 \le r, c \le 20)$。
接下来 $r$ 行每行包含 $c$ 个整数,分别表示第 $r$ 行的 $c$ 个盆栽的高度排名。
数据保证所有盆栽的高度排名组合起来为 $1$ 至 $r\times c$ 的一个排列。
输出仅一行,包含一个整数表示符合题面要求的移动方案数。
对于$40\%$ 的数据,$r, c \le 2$
对于$55\%$ 的数据,$r, c \le 4$
对于另外的 $10\%$ 的数据,保证 $r = 1$ 或 $c = 1$
3 3 1 2 5 7 6 4 9 8 3
49