#include using namespace std; const int MaxN = (int)2e5 + 10; const int INF = (int)1e9; const int MOD = (int)1e9 + 7; int n, a[MaxN], b[MaxN]; void solve() { scanf("%d", &n); int mx = 0, pos = -1; for (int i = 1; i <= n; ++i) { scanf("%d", &a[i]); mx = max(mx, a[i]); if (mx == a[i]) { pos = i; } } bool can = true; for (int i = 1; i <= n; ++i) { if (a[i] == -1 || a[i] >= 1 && a[i] == a[pos] - (pos - i)) { continue; } can = false; } if (can) { cout << "inf\n"; return; } set s; for (int i = 1; i <= n; ++i) { if (a[i] != -1) { s.insert (i - a[i] + 1); } } assert (s.size() >= 2); int last = -1e9; int res = 0; for (auto &it : s) { if (last != -1e9) { res = __gcd(res, it - last); } last = it; } for (int i = 1; i <= n; ++i) { b[i] = (a[pos] - (pos - i)) % res; if (b[i] <= 0) { b[i] += res; } if (a[i] != b[i] && a[i] != -1) { cout << "impossible\n"; return; } } cout << res << "\n"; } int main() { // freopen("input.txt", "r", stdin); int t; scanf("%d\n", &t); while (t --> 0) { solve(); } return 0; }