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>
using namespace std;
const int nmax = 1002;
int n, X;
int t[nmax];
bool use[nmax];
bool sum[nmax];
vector<int> links;
int main() {
  cin >> n >> X;
  for (int i = 1; i <= n; ++i) {
    cin >> t[i];
    use[t[i]] = 1;
  }
  int smartTop = -1;
  for (int i = 1; i <= n; ++i) {
    if (!use[i]) {
      int qSize = 0;
      bool smartB = false;
      int j = i;
      while (j != 0) {
        qSize++;
        if (j == X) {
          smartB = true;
        }
        use[j] = true;
        j = t[j];
      }
      if (smartB) {
        smartTop = i;
      } else {
        links.push_back(qSize);
      }
    }
  }
  int smartSize = 0, smartPos = 0;
  while (smartTop != 0) {
    smartSize++;
    if (smartTop == X) {
      smartPos = smartSize;
    }
    smartTop = t[smartTop];
  }
  sort(links.begin(), links.end());
  sum[0] = true;
  for (int i = 0; i < (int)links.size(); ++i) {
    for (int j = n - smartSize; j >= links[i]; --j) {
      sum[j] |= sum[j - links[i]];
    }
  }
  smartPos = smartSize - smartPos + 1;
  for (int j = 0; j <= n - smartSize; ++j) {
    if (sum[j]) {
      cout << j + smartPos << "\n";
    }
  }
  return 0;
}
