
import java.util.HashSet;
import java.util.Scanner;

public class Main {
	public static final int MAX_N = 30;
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.next());
		int m = Integer.parseInt(sc.next());
		int[][] a = new int[n][MAX_N];
		for(int i=0; i<n; i++){
			int k = Integer.parseInt(sc.next());
            if (k == 0) break;
            for(int j=0; j<k; j++) {
                a[i][j] = sc.nextInt();
            }
		}
    	sc.close();
    	HashSet<Integer> hs = new HashSet<>();
    	for (int i=0; i<a[0].length;i++){
    		hs.add(a[0][i]);
    	}
    	hs.remove(0);
    	for(int i=0; i<n; i++){
    		HashSet<Integer> hso = new HashSet<>();
    		for (int j=0; j<a[i].length;j++){
        		hso.add(a[i][j]);
        	}
    		hs.retainAll(hso);
    	}
    	System.out.println(hs.size());
	}

} import java.util.HashSet; HashSet java.util import java.util.Scanner; Scanner java.util public class Main {
	public static final int MAX_N = 30;
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.next());
		int m = Integer.parseInt(sc.next());
		int[][] a = new int[n][MAX_N];
		for(int i=0; i<n; i++){
			int k = Integer.parseInt(sc.next());
            if (k == 0) break;
            for(int j=0; j<k; j++) {
                a[i][j] = sc.nextInt();
            }
		}
    	sc.close();
    	HashSet<Integer> hs = new HashSet<>();
    	for (int i=0; i<a[0].length;i++){
    		hs.add(a[0][i]);
    	}
    	hs.remove(0);
    	for(int i=0; i<n; i++){
    		HashSet<Integer> hso = new HashSet<>();
    		for (int j=0; j<a[i].length;j++){
        		hso.add(a[i][j]);
        	}
    		hs.retainAll(hso);
    	}
    	System.out.println(hs.size());
	}

} Main public static final int MAX_N = 30; MAX_N 30 public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.next());
		int m = Integer.parseInt(sc.next());
		int[][] a = new int[n][MAX_N];
		for(int i=0; i<n; i++){
			int k = Integer.parseInt(sc.next());
            if (k == 0) break;
            for(int j=0; j<k; j++) {
                a[i][j] = sc.nextInt();
            }
		}
    	sc.close();
    	HashSet<Integer> hs = new HashSet<>();
    	for (int i=0; i<a[0].length;i++){
    		hs.add(a[0][i]);
    	}
    	hs.remove(0);
    	for(int i=0; i<n; i++){
    		HashSet<Integer> hso = new HashSet<>();
    		for (int j=0; j<a[i].length;j++){
        		hso.add(a[i][j]);
        	}
    		hs.retainAll(hso);
    	}
    	System.out.println(hs.size());
	} main {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.next());
		int m = Integer.parseInt(sc.next());
		int[][] a = new int[n][MAX_N];
		for(int i=0; i<n; i++){
			int k = Integer.parseInt(sc.next());
            if (k == 0) break;
            for(int j=0; j<k; j++) {
                a[i][j] = sc.nextInt();
            }
		}
    	sc.close();
    	HashSet<Integer> hs = new HashSet<>();
    	for (int i=0; i<a[0].length;i++){
    		hs.add(a[0][i]);
    	}
    	hs.remove(0);
    	for(int i=0; i<n; i++){
    		HashSet<Integer> hso = new HashSet<>();
    		for (int j=0; j<a[i].length;j++){
        		hso.add(a[i][j]);
        	}
    		hs.retainAll(hso);
    	}
    	System.out.println(hs.size());
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int n = Integer.parseInt(sc.next()); n Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc int m = Integer.parseInt(sc.next()); m Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc int[][] a = new int[n][MAX_N]; a new int[n][MAX_N] n MAX_N for(int i=0; i<n; i++){
			int k = Integer.parseInt(sc.next());
            if (k == 0) break;
            for(int j=0; j<k; j++) {
                a[i][j] = sc.nextInt();
            }
		} int i=0; int i=0; i 0 i<n i n i++ i++ i {
			int k = Integer.parseInt(sc.next());
            if (k == 0) break;
            for(int j=0; j<k; j++) {
                a[i][j] = sc.nextInt();
            }
		} {
			int k = Integer.parseInt(sc.next());
            if (k == 0) break;
            for(int j=0; j<k; j++) {
                a[i][j] = sc.nextInt();
            }
		} int k = Integer.parseInt(sc.next()); k Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc if (k == 0) break; k == 0 k 0 break; for(int j=0; j<k; j++) {
                a[i][j] = sc.nextInt();
            } int j=0; int j=0; j 0 j<k j k j++ j++ j {
                a[i][j] = sc.nextInt();
            } {
                a[i][j] = sc.nextInt();
            } a[i][j] = sc.nextInt() a[i][j] a[i] a i j sc.nextInt() sc.nextInt sc sc.close() sc.close sc HashSet<Integer> hs = new HashSet<>(); hs new HashSet<>() for (int i=0; i<a[0].length;i++){
    		hs.add(a[0][i]);
    	} int i=0; int i=0; i 0 i<a[0].length i a[0].length a[0] a 0 a[0].length i++ i++ i {
    		hs.add(a[0][i]);
    	} {
    		hs.add(a[0][i]);
    	} hs.add(a[0][i]) hs.add hs a[0][i] a[0] a 0 i hs.remove(0) hs.remove hs 0 for(int i=0; i<n; i++){
    		HashSet<Integer> hso = new HashSet<>();
    		for (int j=0; j<a[i].length;j++){
        		hso.add(a[i][j]);
        	}
    		hs.retainAll(hso);
    	} int i=0; int i=0; i 0 i<n i n i++ i++ i {
    		HashSet<Integer> hso = new HashSet<>();
    		for (int j=0; j<a[i].length;j++){
        		hso.add(a[i][j]);
        	}
    		hs.retainAll(hso);
    	} {
    		HashSet<Integer> hso = new HashSet<>();
    		for (int j=0; j<a[i].length;j++){
        		hso.add(a[i][j]);
        	}
    		hs.retainAll(hso);
    	} HashSet<Integer> hso = new HashSet<>(); hso new HashSet<>() for (int j=0; j<a[i].length;j++){
        		hso.add(a[i][j]);
        	} int j=0; int j=0; j 0 j<a[i].length j a[i].length a[i] a i a[i].length j++ j++ j {
        		hso.add(a[i][j]);
        	} {
        		hso.add(a[i][j]);
        	} hso.add(a[i][j]) hso.add hso a[i][j] a[i] a i j hs.retainAll(hso) hs.retainAll hs hso System.out.println(hs.size()) System.out.println System.out System System.out hs.size() hs.size hs String[] args args public class Main {
	public static final int MAX_N = 30;
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.next());
		int m = Integer.parseInt(sc.next());
		int[][] a = new int[n][MAX_N];
		for(int i=0; i<n; i++){
			int k = Integer.parseInt(sc.next());
            if (k == 0) break;
            for(int j=0; j<k; j++) {
                a[i][j] = sc.nextInt();
            }
		}
    	sc.close();
    	HashSet<Integer> hs = new HashSet<>();
    	for (int i=0; i<a[0].length;i++){
    		hs.add(a[0][i]);
    	}
    	hs.remove(0);
    	for(int i=0; i<n; i++){
    		HashSet<Integer> hso = new HashSet<>();
    		for (int j=0; j<a[i].length;j++){
        		hso.add(a[i][j]);
        	}
    		hs.retainAll(hso);
    	}
    	System.out.println(hs.size());
	}

} public class Main {
	public static final int MAX_N = 30;
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.next());
		int m = Integer.parseInt(sc.next());
		int[][] a = new int[n][MAX_N];
		for(int i=0; i<n; i++){
			int k = Integer.parseInt(sc.next());
            if (k == 0) break;
            for(int j=0; j<k; j++) {
                a[i][j] = sc.nextInt();
            }
		}
    	sc.close();
    	HashSet<Integer> hs = new HashSet<>();
    	for (int i=0; i<a[0].length;i++){
    		hs.add(a[0][i]);
    	}
    	hs.remove(0);
    	for(int i=0; i<n; i++){
    		HashSet<Integer> hso = new HashSet<>();
    		for (int j=0; j<a[i].length;j++){
        		hso.add(a[i][j]);
        	}
    		hs.retainAll(hso);
    	}
    	System.out.println(hs.size());
	}

} Main

import java.util.HashSet;
import java.util.Scanner;

public class Main {
	public static final int MAX_N = 30;
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.next());
		int m = Integer.parseInt(sc.next());
		int[][] a = new int[n][MAX_N];
		for(int i=0; i<n; i++){
			int k = Integer.parseInt(sc.next());
            if (k == 0) break;
            for(int j=0; j<k; j++) {
                a[i][j] = sc.nextInt();
            }
		}
    	sc.close();
    	HashSet<Integer> hs = new HashSet<>();
    	for (int i=0; i<a[0].length;i++){
    		hs.add(a[0][i]);
    	}
    	hs.remove(0);
    	for(int i=0; i<n; i++){
    		HashSet<Integer> hso = new HashSet<>();
    		for (int j=0; j<a[i].length;j++){
        		hso.add(a[i][j]);
        	}
    		hs.retainAll(hso);
    	}
    	System.out.println(hs.size());
	}

}
