#include <bits/stdc++.h>
using namespace std;
struct vec {
  long double x, y;
  bool operator==(const vec &a) const { return x == a.x && y == a.y; }
  bool operator<(const vec &a) const {
    if (a.x != x) return x < a.x;
    return y < a.y;
  }
  vec operator+(const vec &a) const { return {x + a.x, y + a.y}; }
  vec operator*(const long double &a) const { return {x * a, y * a}; }
  vec operator-(const vec &a) const { return {x - a.x, y - a.y}; }
  vec operator/(const long double &a) const { return {x / a, y / a}; }
  long double len() const { return (x * x + y * y); }
  long double dot(const vec &a) const { return x * a.x + y * a.y; }
  long double crs(const vec &a) const { return x * a.y - y * a.x; }
  vec proj(const vec &a) const {
    return (a / a.len()) * (*this).dot(a) / a.len();
  }
};
struct P {
  int x, y;
  bool operator<(const P &a) const { return y > a.y; }
};
long long x, y, z, mod = 1000000007;
vector<int> v[1];
int i, n, m, k, a, d, b, c, h, dx[10] = {1, 0, -1, 0}, dy[10] = {0, 1, 0, -1};
int e;
int l[1000551];
int o[1000511];
int j[1];
stack<int> s;
queue<int> q;
P u[1111], u1[1];
string r, r1;
map<int, int> p;
bool as(P a, P b) { return a.y < b.y; }
void f(int n) {
  if (l[n] == 2) return;
  l[n]++;
  f(n - o[n]);
}
int main() {
  scanf("%d", &e);
  for (int t = 1; t <= e; t++) {
    scanf("%d", &a);
    for (int t = 1; t <= a; l[t] = 0, t++) scanf("%d", &o[t]);
    f(1);
    k = 0;
    for (int t = 1; t <= a; t++)
      if (l[t] == 2) k++;
    printf("%d\n", k);
    for (int t = 1; t <= a; t++)
      if (l[t] == 2) printf("%d ", t);
    puts("");
  }
}
