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

import java.io.*;
import java.util.*;

public class EKGB2 {
    public static void main(String[] args){
        PrintWriter pw = new PrintWriter(System.out);
        Scanner sc = new Scanner(System.in);
        solve(sc, pw);
        sc.close();
        pw.flush();
        pw.close();
    }
    
    private static void solve(Scanner sc, PrintWriter pw){
        int n = sc.nextInt();
        int x = sc.nextInt() -1;
        int[] a = new int[n];
        for(int i = 0; i < n; i++){
            a[i] = sc.nextInt() -1;
        }
        
        boolean[] possible = new boolean[n+1];
        possible[0] = true;
        
        boolean[] tails = new boolean[n];
        Arrays.fill(tails, true);
        for(int i = 0; i <n; i++){
            if(a[i] >= 0){
                tails[a[i]] = false;
            }
        }
        for(int i = 0; i < n; i++){
            if(tails[i]){
                int at = i;
                int len = 0;
                boolean foundMe = false;
                while(at >= 0){
                    if(at == x){
                        foundMe = true;
                    }
                    len ++;
                    at = a[at];
                }
                if(!foundMe){
                    for(int k = n - len; k>= 0; k --){
                        if(possible[k]){
                            possible[k + len] = true;
                        }
                    }
                }
            }
        }
        
        int offSet = 0;
        while(x >= 0){
            offSet ++;
            x = a[x];
        }
        
        for(int i = 0; i < n; i++){
            if(possible[i]){
                pw.println(i+offSet);
            }
        }
    }
}
