#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N=500005;
const int INF=0x7FFFFFFF;
int n,e;
int S[N];
int Maxi[N];
int F[2][N];
struct edge{int x,y;edge *next;}g[N],*ls[N];
int max(int x,int y){return x>y?x:y;}

void addedge(int x,int y){
    g[++e].x=x; g[e].y=y; g[e].next=ls[x]; ls[x]=&g[e];
}

void dp(){
    int i,Max;
    edge *t;
    for (i=n;i>=1;i--){
        F[0][i]=0;
        F[1][i]=1;
        Max=-INF;
        for (t=ls[i];t;t=t->next){
            F[0][i]+=F[0][t->y];
            F[1][i]+=F[0][t->y];
            if (-F[0][t->y]+F[1][t->y]>Max){
                Max=-F[0][t->y]+F[1][t->y];
                Maxi[i]=t->y;
            }
        }
        if (Max>0) F[0][i]+=Max;
              else Maxi[i]=0;
    }
}

void output(){
    int i,cnt;
    S[1]=0;
    for (i=1;i<=n;i++)
      for (edge *t=ls[i];t;t=t->next)
        if (!S[i] && t->y==Maxi[i])
          S[t->y]=1;
        else
          S[t->y]=0;
    cnt=0;
    for (i=1;i<=n;i++)
      cnt+=S[i];
    cout << (long long)(cnt)*1000 << "\n";
    bool first=true;
    for (i=1;i<=n;i++)
      if (S[i]){
        if (!first) printf(" ");
        printf("%d",i);
        first=false;
      }
    puts("");
}

int main(){
    int Tc;
    scanf("%d",&Tc);
    while (Tc--){
        scanf("%d",&n);
        e=0; memset(ls,0,sizeof(ls));
        for (int fa,i=2;i<=n;i++){
            scanf("%d",&fa);
            addedge(fa,i);
        }
        dp();
        output();
        if (Tc) puts("");
    }
}