#include<iostream>
#include<vector>
#include<set>
using namespace std;
int maxlevel = 1;
vector<vector<int>> v;
set<int> s;
void dfs(int node,int level){
if(level>maxlevel){
maxlevel = level;
s.clear();
s.insert(node);
}else if(level == maxlevel){
s.insert(node);
}
for(int i=0;i<v[node].size();i++){
dfs(v[node][i],level+1);
}
}
int main()
{
int n,num,root = 0;
scanf("%d",&n);
v.resize(n+1);
for(int i=1;i<=n;i++){
scanf("%d",&num);
if(num==-1){
root = i;
continue;
}
v[num].push_back(i);
}
dfs(root,1);
printf("%d\n",maxlevel);
for(set<int>::iterator it = s.begin();it!=s.end();it++){
if(it!=s.begin()){
printf(" ");
}
printf("%d",*it);
}
return 0;
}
#include<iostream>
#include<map>
#include<vector>
#include<bits/stdc++.h>
using namespace std;
map<string,int> Gp;//在线编程成绩
map<string,int> Gm;//期中考试成绩
map<string,int> Gf;//期末考试成绩
map<string,double> G;//总评
map<string,int>::iterator it;
vector< pair<string,int> > vec;
bool cmp(pair<string,int> a,pair<string,int>b){
if(a.second!=b.second)
return a.second>b.second;
return a.first<b.first;
}
int main()
{
int p,m,n;
cin>>p>>m>>n;
for(int i=1;i<=p;i++)
{
string s;
int score;
cin>>s>>score;
Gp[s]=score;
}
for(int i=1;i<=m;i++)
{
string s;
int score;
cin>>s>>score;
Gm[s]=score;
}
for(int i=1;i<=n;i++)
{
string s;
int score;
cin>>s>>score;
Gf[s]=score;
}
it=Gp.begin();
while(it!=Gp.end())
{
string s;
s=it->first;
if(Gm.count(s)>0)
{
if(Gm[s]>Gf[s])
{
G[s]=0.4*Gm[s]+0.6*Gf[s];
G[s]=round(G[s]);
}
else G[s]=Gf[s];
}
else
{
Gm[s]=-1;
G[s]=Gf[s];
}
//cout<<s<<" "<<Gp[s]<<" "<<Gm[s]<<" "<<" "<<Gf[s]<<" "<<G[s]<<endl;
it++;
}
for(map<string,double>::iterator it = G.begin();it!=G.end();it++)
{
vec.push_back( pair<string,int>(it->first,it->second));
}
sort(vec.begin(),vec.end(),cmp);
for(vector< pair<string,int> >::iterator it=vec.begin();it!=vec.end();it++)
{
string s;
s=it->first;
if(Gp[s]>=200&&G[s]>=60)
{
cout<<s<<" "<<Gp[s]<<" "<<Gm[s]<<" "<<Gf[s]<<" "<<G[s]<<endl;
}
}
}