放物品
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

 n 个物品,每个物品有一个编号。规定第 i 个物品不可以放在位置 p_i 上。

摆放这些物品,这样定义这个序列的key值:

对于每一个编号为 i 的物品,假设存在一个物品 j 满足 j 在 i 前面,同时 j的编号比 i大,记第 i 个物品的位置为pos_i,那么对key值产生的贡献就是

求对于所有合法的排列,它们的key值之和为多少

输入描述:

第一行一个整数 T ,描述数据组数。

对于每组数据第一行是一个整数 n ,表示物品的数量

接下来一个长度为 n 的序列,描述p_i

T≤10,n≤1000,答案对998244353取模,保证p_i是一个排列

输出描述:

共 T 行,每行一个整数表示答案。
示例1

输入

复制
2
2
1 2
3
1 2 3

输出

复制
1
8