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;
int f[1005], v[1005], pr[1005], x, cc = 0, cont = 0, cate[1005], contor = 0,
                                   sume[1005], sumi, rucsac[1005];
void dfs(int nod) {
  if (v[nod] != 0) {
    pr[v[nod]] = nod;
    if (f[v[nod]] == 0) {
      f[v[nod]] = 1;
      dfs(v[nod]);
    }
  }
}
void anti_dfs(int nod) {
  if (nod == 0) {
    return;
  }
  if (nod == x) cc = 1;
  cont++;
  anti_dfs(pr[nod]);
  cate[nod] = cate[pr[nod]] + 1;
}
int main() {
  int n;
  cin >> n >> x;
  for (int i = 1; i <= n; i++) {
    cin >> v[i];
  }
  for (int i = 1; i <= n; i++) {
    if (v[i] != 0 and f[i] == 0) {
      f[i] = 1;
      dfs(i);
    }
  }
  for (int i = 1; i <= n; i++) {
    if (v[i] == 0) {
      anti_dfs(i);
      if (cc == 1) {
        sumi = cate[i] - cate[x] + 1;
      } else {
        sume[++contor] = cate[i];
      }
      cc = 0;
      cont = 0;
    }
  }
  rucsac[0] = 1;
  for (int i = 1; i <= contor; i++) {
    for (int j = n; j >= 0; j--) {
      if (rucsac[j] == 1) {
        rucsac[j + sume[i]] = 1;
      }
    }
  }
  for (int i = 0; i <= n; i++) {
    if (rucsac[i] == 1) {
      cout << i + sumi << "\n";
    }
  }
  return 0;
}
