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

//In the Name of God
#include <iostream>
#include <vector>
#include <cstring>

using namespace std;

int n , x , ind , a[3000 + 10] , nex[1000+10] , prev[1000+10];
bool vis[1000+10] , dp[1000 + 10];
vector<int> v;

int f(int u)
{
  int ret = 1;
  vis[u] = true;
  int v = u;
  while (nex[v] != -1)
    {
      ret ++;
      v= nex[v];
      vis[v] = true;
    }
  v =u;
  while (prev[v] != -1)
    {
      ret ++;
      v = prev[v];
      vis[v] = true;
    }
  return ret;
 
}

int main()
{
  memset(nex , -1 , sizeof nex);
  memset(prev , -1 , sizeof prev);
 
  cin >> n >> x;
  x--;
  for (int i=0 ; i<n ; i++)
    {
      cin >> a[i];
      a[i] --;
     
      if (a[i] != 0)
	{
	  nex[a[i]] = i;
	  prev[i] = a[i];
	}
    }
  int ind = 1;
  while (prev[x] != -1)
    {
      ind ++;
      x = prev[x];
    }
  
  f(x);
  for (int i=0 ; i<n ; i++)
    {
      if (vis[i] == false)
	{
	  v.push_back(f(i));
	}
    }
  
  dp[0] =true;
 
  for (int i=0 ; i<v.size() ;i++)
    {
      for (int j=0 ; j<=n ; j++)
	{
	  //cout << v[i] << " khar" << endl;
	  
	  if (dp[j] && v[i] + j <=n) dp[v[i]+j] = true;
	}
    }
  
  for (int i=0 ; i<=n ; i++)
    {
      if (dp[i] && i+ind <=n) cout << i+ind << endl;
    }
  return 0;
}

