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 <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000000")
using namespace std;
const long long int INF = 1e17;
int main() {
  long long int n, x, a;
  cin >> n >> x;
  x--;
  vector<long long int> op(n, -1), an(n, -1);
  vector<long long int> ch(n, 0);
  vector<long long int> used(n, 0);
  for (long long int i = 0; i < n; i++) {
    cin >> a;
    if (!a)
      ch[i] = 1;
    else {
      a--;
      op[i] = a;
      an[a] = i;
    }
  }
  long long int num = 1;
  while (!ch[x]) {
    num++;
    x = op[x];
  }
  used[x]++;
  vector<long long int> numb;
  for (long long int i = 0; i < n; i++) {
    if (ch[i] && !used[i]) {
      used[i]++;
      long long int temp = 1;
      x = i;
      while (an[x] != -1) {
        temp++;
        x = an[x];
      }
      numb.push_back(temp);
    }
  }
  sort(numb.begin(), numb.end());
  vector<long long int> can(n + 1, 0);
  can[num] = 1;
  for (long long int i = 0; i < numb.size(); i++) {
    vector<long long int> newo = can;
    for (long long int j = 0; j <= n; j++) {
      if (can[j]) newo[j + numb[i]]++;
    }
    can = newo;
  }
  for (long long int i = 0; i <= n; i++) {
    if (can[i]) cout << i << endl;
  }
}
