import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		List<Integer> list1 = new ArrayList<Integer>();
		List<Integer> list2 = new ArrayList<Integer>();
		for (int i = 0; i < N; i++) {
			int K = sc.nextInt();
			if(N == 1) {
				System.out.println(K);
				System.exit(0);
			}
			for (int j = 0; j < K; j++) {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			}

			if (i != 0 || i == N-1) {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			}

		}
		System.out.println(list1.size());
	}
} import java.util.ArrayList; ArrayList java.util import java.util.List; List java.util import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		List<Integer> list1 = new ArrayList<Integer>();
		List<Integer> list2 = new ArrayList<Integer>();
		for (int i = 0; i < N; i++) {
			int K = sc.nextInt();
			if(N == 1) {
				System.out.println(K);
				System.exit(0);
			}
			for (int j = 0; j < K; j++) {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			}

			if (i != 0 || i == N-1) {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			}

		}
		System.out.println(list1.size());
	}
} Main public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		List<Integer> list1 = new ArrayList<Integer>();
		List<Integer> list2 = new ArrayList<Integer>();
		for (int i = 0; i < N; i++) {
			int K = sc.nextInt();
			if(N == 1) {
				System.out.println(K);
				System.exit(0);
			}
			for (int j = 0; j < K; j++) {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			}

			if (i != 0 || i == N-1) {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			}

		}
		System.out.println(list1.size());
	} main {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		List<Integer> list1 = new ArrayList<Integer>();
		List<Integer> list2 = new ArrayList<Integer>();
		for (int i = 0; i < N; i++) {
			int K = sc.nextInt();
			if(N == 1) {
				System.out.println(K);
				System.exit(0);
			}
			for (int j = 0; j < K; j++) {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			}

			if (i != 0 || i == N-1) {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			}

		}
		System.out.println(list1.size());
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int N = sc.nextInt(); N sc.nextInt() sc.nextInt sc int M = sc.nextInt(); M sc.nextInt() sc.nextInt sc List<Integer> list1 = new ArrayList<Integer>(); list1 new ArrayList<Integer>() List<Integer> list2 = new ArrayList<Integer>(); list2 new ArrayList<Integer>() for (int i = 0; i < N; i++) {
			int K = sc.nextInt();
			if(N == 1) {
				System.out.println(K);
				System.exit(0);
			}
			for (int j = 0; j < K; j++) {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			}

			if (i != 0 || i == N-1) {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			}

		} int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
			int K = sc.nextInt();
			if(N == 1) {
				System.out.println(K);
				System.exit(0);
			}
			for (int j = 0; j < K; j++) {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			}

			if (i != 0 || i == N-1) {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			}

		} {
			int K = sc.nextInt();
			if(N == 1) {
				System.out.println(K);
				System.exit(0);
			}
			for (int j = 0; j < K; j++) {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			}

			if (i != 0 || i == N-1) {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			}

		} int K = sc.nextInt(); K sc.nextInt() sc.nextInt sc if(N == 1) {
				System.out.println(K);
				System.exit(0);
			} N == 1 N 1 {
				System.out.println(K);
				System.exit(0);
			} System.out.println(K) System.out.println System.out System System.out K System.exit(0) System.exit System 0 for (int j = 0; j < K; j++) {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			} int j = 0; int j = 0; j 0 j < K j K j++ j++ j {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			} {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			} int A = sc.nextInt(); A sc.nextInt() sc.nextInt sc if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				} i == 0 i 0 {
					list1.add(A);
					continue;
				} list1.add(A) list1.add list1 A continue; if (list1.contains(A)) {
					list2.add(A);

				} list1.contains(A) list1.contains list1 A {
					list2.add(A);

				} list2.add(A) list2.add list2 A if (i != 0 || i == N-1) {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			} i != 0 || i == N-1 i != 0 i 0 i == N-1 i N-1 N 1 {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			} list1.clear() list1.clear list1 list1.addAll(list2) list1.addAll list1 list2 list2.clear() list2.clear list2 System.out.println(list1.size()) System.out.println System.out System System.out list1.size() list1.size list1 String[] args args public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		List<Integer> list1 = new ArrayList<Integer>();
		List<Integer> list2 = new ArrayList<Integer>();
		for (int i = 0; i < N; i++) {
			int K = sc.nextInt();
			if(N == 1) {
				System.out.println(K);
				System.exit(0);
			}
			for (int j = 0; j < K; j++) {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			}

			if (i != 0 || i == N-1) {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			}

		}
		System.out.println(list1.size());
	}
} public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		List<Integer> list1 = new ArrayList<Integer>();
		List<Integer> list2 = new ArrayList<Integer>();
		for (int i = 0; i < N; i++) {
			int K = sc.nextInt();
			if(N == 1) {
				System.out.println(K);
				System.exit(0);
			}
			for (int j = 0; j < K; j++) {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			}

			if (i != 0 || i == N-1) {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			}

		}
		System.out.println(list1.size());
	}
} Main
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		List<Integer> list1 = new ArrayList<Integer>();
		List<Integer> list2 = new ArrayList<Integer>();
		for (int i = 0; i < N; i++) {
			int K = sc.nextInt();
			if(N == 1) {
				System.out.println(K);
				System.exit(0);
			}
			for (int j = 0; j < K; j++) {
				int A = sc.nextInt();
				//初回
				if (i == 0) {
					list1.add(A);
					continue;
				} else if (list1.contains(A)) {
					list2.add(A);

				}
			}

			if (i != 0 || i == N-1) {
				list1.clear();
				list1.addAll(list2);
				list2.clear();

			}

		}
		System.out.println(list1.size());
	}
}
