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

/*
ID: nikchee1
PROB: Codeforces Queues
LANG: JAVA
*/
import java.util.*;
import java.io.*;
public class Main{
  static Scanner in = new Scanner(System.in);
  static int N = in.nextInt();
  static int x = in.nextInt();
  
 public static void main(String[] args) {
  
  
  int[] xpos = new int[N];
  int[] map = new int[N];
  Arrays.fill(map, -1);
  for(int i = 0; i < N; i++) {
   xpos[i] = in.nextInt()-1;
   if(xpos[i] >= 0)
    map[xpos[i]] = i;
  }
  
  int start = 0;
  
  List<Integer> prq = new ArrayList<Integer>();
  for(int i = 0; i < N; i++) {
   if(map[i] == -1) {
    boolean qrt = false;
    int depth = 1;
    int y = i;
    while(xpos[y] >= 0) {
     if(y == x) {
      start = depth;
      qrt = true;
     }
     y = xpos[y];
     depth++;
    }
    if(y==x) {
     start = depth;
     qrt = true;
    }
    
    if(qrt){
     start = depth - start + 1;
    }
    else prq.add(depth);
   }
  }
  
  boolean[] has = new boolean[N + 1];
  has[start] = true;
  for(Integer depth : prq) {
   for(int i= N - depth; i>=0; i--)
    if(has[i])
     has[i + depth] = true;
  }
  
  for(int i=0; i <= N; i++)
   if(has[i])
    System.out.println(i + 1 );
 }

}