#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define int long long
#define N 200010
int T, n;
int nx[N];
int ru[N];
std::vector<int> g[N];
bool check(int x) {
return 1 <= x && x <= n;
}
int dep[N], idx, id[N], cnt[N], sum;
bool vis[N];
int siz[N];
void dfs(int k, int deep) {
siz[k] = 1;
vis[k] = 1;
dep[k] = deep;
id[k] = idx;
cnt[idx]++;//联通块大小
sum++;
int sz = g[k].size();
for (int i = 0; i < sz; i++) {
int p = g[k][i];
dfs(p, deep + 1);
siz[k] += siz[p];
}
}
signed main() {
scanf("%lld", &T);
while (T--) {
scanf("%lld", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld", &nx[i]);
nx[i] += i;
if (check(nx[i])) {
ru[i]++;
g[nx[i]].push_back(i);
}
}
for (int i = 1; i <= n; i++) {
if (!ru[i]) {
idx++;
dfs(i, 1);//dfs了所有的树
}
}
for (int i = 1; i <= n; i++)
vis[i] = 0;
if (id[1])
sum -= cnt[id[1]];
int p = 1, ans = 0;
while (check(p) && !vis[p]) {
vis[p] = 1;
ans += n + 1;
if (id[1])
ans += cnt[id[1]] - siz[p];
ans += sum;
p = nx[p];
}
for (int i = 1; i <= n; i++)
if (id[1] && !vis[i])
ans += 2 * n + 1;
printf("%lld\n", ans);
for (int i = 1; i <= n; i++) {
vis[i] = 0;
id[i] = 0;
cnt[i] = 0;
dep[i] = 0;
ru[i] = 0;
g[i].clear();
}
idx = sum = 0;
}
}