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.util.*;

public class B {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int x = in.nextInt()-1;
		
		int[] A = new int[n];
		Integer[] B = new Integer[n];
		int zeroes = 0;
		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);
	}
}
