#include #include #include using Int = atcoder::modint998244353; constexpr int K = 2; #include #include Int naive(int n, std::vector p) { Int ans = 0; p.erase(p.begin()); for (int& e : p) --e; std::vector x(n); std::iota(x.begin(), x.end(), 0); do { bool ok = true; for (int i = 0, prev_min = 0; i < n; ++i) { ok &= p[i] < 0 or x[i] == p[i]; if (i + K <= n) { int curr_min = *std::min_element(x.begin() + i, x.begin() + (i + K)); ok &= prev_min <= curr_min; prev_min = curr_min; } if (not ok) break; } ans += Int{ ok }; } while (std::next_permutation(x.begin(), x.end())); return ans; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t; std::cin >> t; while (t--) { int n; std::cin >> n; std::vector a(n + 1, -1); for (int i = 1; i <= n; ++i) { std::cin >> a[i]; } assert(n <= 6); std::cout << naive(n, a).val() << std::endl; } }