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()-1;
 public static void main(String[] args) {
  
  
  int[] A = new int[n];
  Integer[] B = new Integer[n];
  for(int i=0; i<n; i++) {
   A[i] = in.nextInt()-1;
   if(A[i]>=0)
    B[A[i]] = i;
  }
  
  int start = 0;
  
  List<Integer> L = new ArrayList<Integer>();
  for(int i=0; i<n; i++) {
   if(B[i]==null) {
    boolean has_x = false;
    int len = 1;
    int y = i;
    while(A[y] >= 0) {
     if(y==x) {
      start = len;
      has_x = true;
     }
     y = A[y];
     len++;
    }
    if(y==x) {
     start = len;
     has_x = true;
    }
    
    if(has_x)
     start = len-start+1;
    else L.add(len);
   }
  }
  
  boolean[] CAN = new boolean[n+1];
  CAN[start] = true;
  for(Integer len : L) {
   for(int i=n-len; i>=0; i--)
    if(CAN[i])
     CAN[i+len] = true;
  }
  
  for(int i=0; i<=n; i++)
   if(CAN[i])
    System.out.println(i);
 }
}