20 20
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 10 4
0 1 4 2 7 0 10 0 5 8
 10 7
10 8 6 5 0 0 0 4 3 9
 10 1
8 7 0 2 0 10 0 0 3 5
 10 7
7 9 2 10 0 0 0 3 5 1
 10 2
10 0 9 0 0 4 2 6 8 0
 10 2
0 7 0 10 8 0 4 2 3 0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 3
4
8
9
 1
5
6
10
 2
4
5
7
8
10
 1
2
6
7
 1
2
3
4
6
7
8
9
 4
5
6
7
8

#include<iostream>
#include<vector >
#include<set>

using namespace std;
const int maxN=1e3+100;

bool dp[maxN][maxN];
vector <int> v,ans;
set <int> myst;
int n, x;
int a[maxN],b[maxN];
int pos;
int alg(int k)
{
  int ans=1000000;
  int cnt=1;
  if(k==x){
    pos=1;
    return 0;
  }
  while(b[k]){
    cnt++;
    if(b[k]==x){
      pos=cnt;
      return 0;}

    k=b[k];

  }
  return min(cnt,ans);

}

void input()
{
  cin>>n>>x;

  for(int i=1;i<=n;i++){
    cin>>a[i];
    b[a[i]]=i;
    if(a[i]==0)
      v.push_back(i);
}

  for(int i=0;i<v.size();i++){
    if(alg(v[i])>0)
      ans.push_back(alg(v[i]));
  }
}


void count_them()
{
  for(int i=1;i<=n;i++)
    for(int j=0;j<=ans.size();j++)
      if(dp[i][j])
	myst.insert(i);

  while(myst.size())
    {
      cout<<*myst.begin()<<endl;
      int t=*myst.begin();
      myst.erase(t);
    }
}
int main()
{
  input();

  dp[pos][0]=true;
  //  cout<<pos;
  // for(int i=1;i<ans.size();i++)
  //  cout<<ans[i]<<" ";
  // cout<<endl<<endl;

  // for(int i=1;i<=n;i++)
  // cout<<a[i]<< ""<<b[i]<<endl;

  for(int i=1;i<=n;i++)
    for(int j=1;j<=ans.size();j++)
      if(dp[i][j-1] || dp[i-ans[j-1]][j-1])
	dp[i][j]=true;

  count_them();

  return 0;
}
