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 a[1010], b[1010], rank[1010];
bool c[1010], d[1010];
int find(int k) {
  if (b[k] != k) b[k] = find(b[k]);
  return b[k];
}
int front(int k) {
  int ans = 1;
  while (a[k] != 0) {
    k = a[k];
    ans++;
  }
  return ans;
}
int main() {
  int i, j, n, x, s, t, ans;
  scanf("%d%d", &n, &x);
  memset(c, false, sizeof(c));
  memset(d, false, sizeof(d));
  for (i = 1; i <= n; i++) {
    rank[i] = 1;
    b[i] = i;
  }
  for (i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    if (a[i] != 0) {
      s = find(a[i]);
      t = find(i);
      if (s != t) {
        b[s] = t;
        rank[t] += rank[s];
      }
    }
  }
  t = find(x);
  c[0] = true;
  for (i = 1; i <= n; i++) {
    s = find(i);
    if ((s != t) && (d[s] == false)) {
      for (j = n - rank[s]; j >= 0; j--)
        if (c[j] == true) c[j + rank[s]] = true;
      d[s] = true;
    }
  }
  ans = front(x);
  for (i = 0; i <= n; i++)
    if ((c[i] == true) && (i + ans <= n)) printf("%d\n", i + ans);
  return 0;
}
