import java.util.*;
public class Main {
	public static void main(String[] args)
	{
		//変数
		int count=0;
		boolean sw=false;
		int answer=0;
		//long answer=0;
		//double answer=0;
		//String answer="NO";
		List<Integer> h=new ArrayList<Integer>();
		//int af=Integer.MAX_VALUE;
		int L=0;
		//int sub=0;
		int n=0;
		int m=0;
		int c[]=new int[31];
		for(int i=0;i<31;i++)
		{
			c[i]=0;
		}
		//int t[]=new int[(int)Math.pow(10,5)];
		
		//入力
		Scanner sc = new Scanner(System.in);
		n=sc.nextInt();
		m=sc.nextInt();
		//X=sc.nextDouble();
		int a[][]=new int[n][m];
		int k[]=new int[n];
		for(int i=0;i<n;i++)
		{
			k[i]=sc.nextInt();
			for(int j=0;j<k[i];j++)
			{
				a[i][j]=sc.nextInt();
			}
		}
		
		//int A[]=new int[L];
		//for(int i=0;i<L;i++)
		//{
		//	A[i]=sc.nextInt();
		//}
		//String S=sc.next();
		
		//処理
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<k[i];j++)
			{
				c[a[i][j]]+=1;
			}
		}
		for(int i=0;i<31;i++)
		{
			if(c[i]==n)
			{
				answer++;
			}
		}
		// 出力
		//System.out.println(Arrays.toString(X))
		//System.out.println(Arrays.deepToString(a));
		//System.out.println(Arrays.toString(h.toArray()));
		System.out.println(answer);
	}
} import java.util.*; util.* java public class Main {
	public static void main(String[] args)
	{
		//変数
		int count=0;
		boolean sw=false;
		int answer=0;
		//long answer=0;
		//double answer=0;
		//String answer="NO";
		List<Integer> h=new ArrayList<Integer>();
		//int af=Integer.MAX_VALUE;
		int L=0;
		//int sub=0;
		int n=0;
		int m=0;
		int c[]=new int[31];
		for(int i=0;i<31;i++)
		{
			c[i]=0;
		}
		//int t[]=new int[(int)Math.pow(10,5)];
		
		//入力
		Scanner sc = new Scanner(System.in);
		n=sc.nextInt();
		m=sc.nextInt();
		//X=sc.nextDouble();
		int a[][]=new int[n][m];
		int k[]=new int[n];
		for(int i=0;i<n;i++)
		{
			k[i]=sc.nextInt();
			for(int j=0;j<k[i];j++)
			{
				a[i][j]=sc.nextInt();
			}
		}
		
		//int A[]=new int[L];
		//for(int i=0;i<L;i++)
		//{
		//	A[i]=sc.nextInt();
		//}
		//String S=sc.next();
		
		//処理
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<k[i];j++)
			{
				c[a[i][j]]+=1;
			}
		}
		for(int i=0;i<31;i++)
		{
			if(c[i]==n)
			{
				answer++;
			}
		}
		// 出力
		//System.out.println(Arrays.toString(X))
		//System.out.println(Arrays.deepToString(a));
		//System.out.println(Arrays.toString(h.toArray()));
		System.out.println(answer);
	}
} Main public static void main(String[] args)
	{
		//変数
		int count=0;
		boolean sw=false;
		int answer=0;
		//long answer=0;
		//double answer=0;
		//String answer="NO";
		List<Integer> h=new ArrayList<Integer>();
		//int af=Integer.MAX_VALUE;
		int L=0;
		//int sub=0;
		int n=0;
		int m=0;
		int c[]=new int[31];
		for(int i=0;i<31;i++)
		{
			c[i]=0;
		}
		//int t[]=new int[(int)Math.pow(10,5)];
		
		//入力
		Scanner sc = new Scanner(System.in);
		n=sc.nextInt();
		m=sc.nextInt();
		//X=sc.nextDouble();
		int a[][]=new int[n][m];
		int k[]=new int[n];
		for(int i=0;i<n;i++)
		{
			k[i]=sc.nextInt();
			for(int j=0;j<k[i];j++)
			{
				a[i][j]=sc.nextInt();
			}
		}
		
		//int A[]=new int[L];
		//for(int i=0;i<L;i++)
		//{
		//	A[i]=sc.nextInt();
		//}
		//String S=sc.next();
		
		//処理
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<k[i];j++)
			{
				c[a[i][j]]+=1;
			}
		}
		for(int i=0;i<31;i++)
		{
			if(c[i]==n)
			{
				answer++;
			}
		}
		// 出力
		//System.out.println(Arrays.toString(X))
		//System.out.println(Arrays.deepToString(a));
		//System.out.println(Arrays.toString(h.toArray()));
		System.out.println(answer);
	} main {
		//変数
		int count=0;
		boolean sw=false;
		int answer=0;
		//long answer=0;
		//double answer=0;
		//String answer="NO";
		List<Integer> h=new ArrayList<Integer>();
		//int af=Integer.MAX_VALUE;
		int L=0;
		//int sub=0;
		int n=0;
		int m=0;
		int c[]=new int[31];
		for(int i=0;i<31;i++)
		{
			c[i]=0;
		}
		//int t[]=new int[(int)Math.pow(10,5)];
		
		//入力
		Scanner sc = new Scanner(System.in);
		n=sc.nextInt();
		m=sc.nextInt();
		//X=sc.nextDouble();
		int a[][]=new int[n][m];
		int k[]=new int[n];
		for(int i=0;i<n;i++)
		{
			k[i]=sc.nextInt();
			for(int j=0;j<k[i];j++)
			{
				a[i][j]=sc.nextInt();
			}
		}
		
		//int A[]=new int[L];
		//for(int i=0;i<L;i++)
		//{
		//	A[i]=sc.nextInt();
		//}
		//String S=sc.next();
		
		//処理
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<k[i];j++)
			{
				c[a[i][j]]+=1;
			}
		}
		for(int i=0;i<31;i++)
		{
			if(c[i]==n)
			{
				answer++;
			}
		}
		// 出力
		//System.out.println(Arrays.toString(X))
		//System.out.println(Arrays.deepToString(a));
		//System.out.println(Arrays.toString(h.toArray()));
		System.out.println(answer);
	} int count=0; count 0 boolean sw=false; sw false int answer=0; answer 0 List<Integer> h=new ArrayList<Integer>(); h new ArrayList<Integer>() int L=0; L 0 int n=0; n 0 int m=0; m 0 int c[]=new int[31]; c new int[31] 31 for(int i=0;i<31;i++)
		{
			c[i]=0;
		} int i=0; int i=0; i 0 i<31 i 31 i++ i++ i {
			c[i]=0;
		} {
			c[i]=0;
		} c[i]=0 c[i] c i 0 Scanner sc = new Scanner(System.in); sc new Scanner(System.in) n=sc.nextInt() n sc.nextInt() sc.nextInt sc m=sc.nextInt() m sc.nextInt() sc.nextInt sc int a[][]=new int[n][m]; a new int[n][m] n m int k[]=new int[n]; k new int[n] n for(int i=0;i<n;i++)
		{
			k[i]=sc.nextInt();
			for(int j=0;j<k[i];j++)
			{
				a[i][j]=sc.nextInt();
			}
		} int i=0; int i=0; i 0 i<n i n i++ i++ i {
			k[i]=sc.nextInt();
			for(int j=0;j<k[i];j++)
			{
				a[i][j]=sc.nextInt();
			}
		} {
			k[i]=sc.nextInt();
			for(int j=0;j<k[i];j++)
			{
				a[i][j]=sc.nextInt();
			}
		} k[i]=sc.nextInt() k[i] k i sc.nextInt() sc.nextInt sc for(int j=0;j<k[i];j++)
			{
				a[i][j]=sc.nextInt();
			} int j=0; int j=0; j 0 j<k[i] j k[i] k i 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 for(int i=0;i<n;i++)
		{
			for(int j=0;j<k[i];j++)
			{
				c[a[i][j]]+=1;
			}
		} int i=0; int i=0; i 0 i<n i n i++ i++ i {
			for(int j=0;j<k[i];j++)
			{
				c[a[i][j]]+=1;
			}
		} {
			for(int j=0;j<k[i];j++)
			{
				c[a[i][j]]+=1;
			}
		} for(int j=0;j<k[i];j++)
			{
				c[a[i][j]]+=1;
			} int j=0; int j=0; j 0 j<k[i] j k[i] k i j++ j++ j {
				c[a[i][j]]+=1;
			} {
				c[a[i][j]]+=1;
			} c[a[i][j]]+=1 c[a[i][j]] c a[i][j] a[i] a i j 1 for(int i=0;i<31;i++)
		{
			if(c[i]==n)
			{
				answer++;
			}
		} int i=0; int i=0; i 0 i<31 i 31 i++ i++ i {
			if(c[i]==n)
			{
				answer++;
			}
		} {
			if(c[i]==n)
			{
				answer++;
			}
		} if(c[i]==n)
			{
				answer++;
			} c[i]==n c[i] c i n {
				answer++;
			} answer++ answer System.out.println(answer) System.out.println System.out System System.out answer String[] args args public class Main {
	public static void main(String[] args)
	{
		//変数
		int count=0;
		boolean sw=false;
		int answer=0;
		//long answer=0;
		//double answer=0;
		//String answer="NO";
		List<Integer> h=new ArrayList<Integer>();
		//int af=Integer.MAX_VALUE;
		int L=0;
		//int sub=0;
		int n=0;
		int m=0;
		int c[]=new int[31];
		for(int i=0;i<31;i++)
		{
			c[i]=0;
		}
		//int t[]=new int[(int)Math.pow(10,5)];
		
		//入力
		Scanner sc = new Scanner(System.in);
		n=sc.nextInt();
		m=sc.nextInt();
		//X=sc.nextDouble();
		int a[][]=new int[n][m];
		int k[]=new int[n];
		for(int i=0;i<n;i++)
		{
			k[i]=sc.nextInt();
			for(int j=0;j<k[i];j++)
			{
				a[i][j]=sc.nextInt();
			}
		}
		
		//int A[]=new int[L];
		//for(int i=0;i<L;i++)
		//{
		//	A[i]=sc.nextInt();
		//}
		//String S=sc.next();
		
		//処理
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<k[i];j++)
			{
				c[a[i][j]]+=1;
			}
		}
		for(int i=0;i<31;i++)
		{
			if(c[i]==n)
			{
				answer++;
			}
		}
		// 出力
		//System.out.println(Arrays.toString(X))
		//System.out.println(Arrays.deepToString(a));
		//System.out.println(Arrays.toString(h.toArray()));
		System.out.println(answer);
	}
} public class Main {
	public static void main(String[] args)
	{
		//変数
		int count=0;
		boolean sw=false;
		int answer=0;
		//long answer=0;
		//double answer=0;
		//String answer="NO";
		List<Integer> h=new ArrayList<Integer>();
		//int af=Integer.MAX_VALUE;
		int L=0;
		//int sub=0;
		int n=0;
		int m=0;
		int c[]=new int[31];
		for(int i=0;i<31;i++)
		{
			c[i]=0;
		}
		//int t[]=new int[(int)Math.pow(10,5)];
		
		//入力
		Scanner sc = new Scanner(System.in);
		n=sc.nextInt();
		m=sc.nextInt();
		//X=sc.nextDouble();
		int a[][]=new int[n][m];
		int k[]=new int[n];
		for(int i=0;i<n;i++)
		{
			k[i]=sc.nextInt();
			for(int j=0;j<k[i];j++)
			{
				a[i][j]=sc.nextInt();
			}
		}
		
		//int A[]=new int[L];
		//for(int i=0;i<L;i++)
		//{
		//	A[i]=sc.nextInt();
		//}
		//String S=sc.next();
		
		//処理
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<k[i];j++)
			{
				c[a[i][j]]+=1;
			}
		}
		for(int i=0;i<31;i++)
		{
			if(c[i]==n)
			{
				answer++;
			}
		}
		// 出力
		//System.out.println(Arrays.toString(X))
		//System.out.println(Arrays.deepToString(a));
		//System.out.println(Arrays.toString(h.toArray()));
		System.out.println(answer);
	}
} Main
import java.util.*;
public class Main {
	public static void main(String[] args)
	{
		//変数
		int count=0;
		boolean sw=false;
		int answer=0;
		//long answer=0;
		//double answer=0;
		//String answer="NO";
		List<Integer> h=new ArrayList<Integer>();
		//int af=Integer.MAX_VALUE;
		int L=0;
		//int sub=0;
		int n=0;
		int m=0;
		int c[]=new int[31];
		for(int i=0;i<31;i++)
		{
			c[i]=0;
		}
		//int t[]=new int[(int)Math.pow(10,5)];
		
		//入力
		Scanner sc = new Scanner(System.in);
		n=sc.nextInt();
		m=sc.nextInt();
		//X=sc.nextDouble();
		int a[][]=new int[n][m];
		int k[]=new int[n];
		for(int i=0;i<n;i++)
		{
			k[i]=sc.nextInt();
			for(int j=0;j<k[i];j++)
			{
				a[i][j]=sc.nextInt();
			}
		}
		
		//int A[]=new int[L];
		//for(int i=0;i<L;i++)
		//{
		//	A[i]=sc.nextInt();
		//}
		//String S=sc.next();
		
		//処理
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<k[i];j++)
			{
				c[a[i][j]]+=1;
			}
		}
		for(int i=0;i<31;i++)
		{
			if(c[i]==n)
			{
				answer++;
			}
		}
		// 出力
		//System.out.println(Arrays.toString(X))
		//System.out.println(Arrays.deepToString(a));
		//System.out.println(Arrays.toString(h.toArray()));
		System.out.println(answer);
	}
}