#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 1e9 + 7;
vector<ll> fact, inv_fact;
ll mod_pow(ll a, ll b) {
ll res = 1;
while (b) {
if (b & 1) res = res * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return res;
}
ll mod_inv(ll a) {
return mod_pow(a, MOD - 2);
}
void precompute(int n) {
fact.resize(n + 1);
inv_fact.resize(n + 1);
fact[0] = 1;
for (int i = 1; i <= n; ++i)
fact[i] = fact[i - 1] * i % MOD;
inv_fact[n] = mod_inv(fact[n]);
for (int i = n - 1; i >= 0; --i)
inv_fact[i] = inv_fact[i + 1] * (i + 1) % MOD;
}
ll C(int n, int k) {
return (k < 0 || k > n) ? 0 : fact[n] * inv_fact[k] % MOD * inv_fact[n - k] % MOD;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
precompute(5000);
int t; cin >> t;
while (t--) {
int n; cin >> n;
vector<int> a(n);
vector<bool> present(n, false);
int k = 0; // Число пропусков (-1)
for (int i = 0; i < n; ++i) {
cin >> a[i];
if (a[i] == -1) k++;
else present[a[i]] = true;
}
vector<int> missing;
for (int x = 0; x < n; ++x)
if (!present[x]) missing.push_back(x);
ll total = 0;
// Для каждого возможного mex m
for (int m = 0; m <= n; ++m) {
// Проверка, что все числа [0..m-1] присутствуют или могут быть заполнены
bool possible = true;
for (int x = 0; x < m; ++x)
if (!present[x] && find(missing.begin(), missing.end(), x) == missing.end())
possible = false;
if (!possible) continue;
// Если m есть в фиксированных элементах, mex не может быть m
if (m < n && present[m]) continue;
// Число обязательных пропусков: элементы < m, которые отсутствуют
int s = 0;
for (int x = 0; x < m; ++x)
if (!present[x]) s++;
// Обработка всех подотрезков [l, r]
for (int l = 0; l < n; ++l) {
int cnt_missing = 0;
set<int> current;
for (int r = l; r < n; ++r) {
if (a[r] == -1) cnt_missing++;
else if (a[r] < m) current.insert(a[r]);
// Проверка условий для mex = m
if (current.size() == m && (m == n || !current.count(m))) {
// Число пропусков в подотрезке: need >= s
if (cnt_missing >= s) {
ll ways = C(k - s, cnt_missing - s);
total = (total + ways * fact[k - s] % MOD * m % MOD) % MOD;
}
}
}
}
}
cout << total << '\n';
}
}