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>
int getint() {
  int x = 0;
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9') x *= 10, x += (c - '0'), c = getchar();
  return x;
}
int n, x, settp, pos, tag;
int p[1010], son[1010], set[1010], dp[1010];
void init() {
  n = getint();
  x = getint();
  dp[0] = 1;
  for (int i = 1; i <= n; i++) {
    p[i] = getint();
    if (p[i]) son[p[i]] = i;
  }
}
void run(int idx, int no) {
  if (idx == x) {
    tag = 1;
    pos = no;
  }
  if (tag) return;
  if (son[idx])
    run(son[idx], no + 1);
  else
    set[settp++] = no;
}
void process() {
  for (int i = 1; i <= n; i++)
    if (!p[i]) {
      tag = 0;
      run(i, 1);
    }
  for (int i = 0; i < settp; i++)
    for (int j = n; j >= set[i]; j--)
      if (dp[j - set[i]]) dp[j] = 1;
  for (int i = 0; i + pos <= n; i++)
    if (dp[i]) printf("%d\n", i + pos);
}
int main() {
  init();
  process();
}
