#P15718. 遗失的玩笑排列

遗失的玩笑排列

题目描述

数学社的 Lio 写下了两个 11nn 的排列 ppqq,并声称它们能生成许多“玩笑字符串”。后来他把排列 qq 的一部分擦掉了,只留下了一些确定的位置。

先定义什么是可满足的二进制字符串。

给定两个排列 p,qp,q,一个长度为 nn 的二进制字符串 ss 被称为可满足的,当且仅当存在一个 2×n2\times n 的矩阵 aa,满足:

  1. 112n2n 的每个整数都在矩阵中恰好出现一次;
  2. 第一行元素的大小顺序与排列 pp 一致,即对所有 1i<jn1\le i<j\le n
a1,i<a1,jpi<pj;a_{1,i}<a_{1,j}\Longleftrightarrow p_i<p_j;
  1. 第二行元素的大小顺序与排列 qq 一致,即对所有 1i<jn1\le i<j\le n
a2,i<a2,jqi<qj;a_{2,i}<a_{2,j}\Longleftrightarrow q_i<q_j;
  1. 对每个 1in1\le i\le n,上下两格大小关系由 sis_i 决定:
a1,i<a2,isi=0.a_{1,i}<a_{2,i}\Longleftrightarrow s_i=0.

f(p,q)f(p,q) 为对排列 p,qp,q 可满足的二进制字符串 ss 的数量。

现在给定排列 pp 的全部元素,以及排列 qq 的部分元素。若 qi=0q_i=0,表示该位置的值已经遗失;否则 qiq_i 是已知值。

请计算所有符合已知信息的排列 qqf(p,q)f(p,q) 之和,并对 998244353998244353 取模。

输入格式

第一行包含一个整数 nn

第二行包含 nn 个整数 p1,p2,,pnp_1,p_2,\ldots,p_n,表示一个 11nn 的排列。

第三行包含 nn 个整数 q1,q2,,qnq_1,q_2,\ldots,q_n。若 qi0q_i\ne 0,表示该位置值已知;若 qi=0q_i=0,表示该位置值遗失。

所有已知的 qiq_i 两两不同。

输出格式

输出一行一个整数,表示所有合法排列 qqf(p,q)f(p,q) 之和,对 998244353998244353 取模。

数据范围

  • 1n1001\le n\le 100
  • 1pin1\le p_i\le n,且 pp 是一个排列;
  • 0qin0\le q_i\le n
  • 所有非零的 qiq_i 两两不同。

样例 1

输入

2
1 2
2 1

输出

3

样例 2

输入

4
4 3 2 1
4 3 2 1

输出

16

样例 3

输入

5
1 2 3 4 5
0 0 0 0 0

输出

1546

样例 4

输入

6
1 6 2 5 3 4
0 1 0 2 0 3

输出

52