import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Main {

  public static void main(String[] args) {
    InputReader in = new InputReader(System.in);
    PrintWriter out = new PrintWriter(System.out);

    int n = in.nextInt();
    int m = in.nextInt();

    HashSet<Integer> food = new HashSet<>();

    int k1 = in.nextInt();
    for (int j = 0; j < k1; j++)
      food.add(in.nextInt());

    for (int i = 1; i < n; i++) {
      int k = in.nextInt();

      HashSet<Integer> food1 = new HashSet<>();

      for (int j = 0; j < k; j++) {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      }
      food = food1;
    }

    out.println(food.size());

    out.close();
  }

  static class InputReader {

    public BufferedReader reader;
    public StringTokenizer tokenizer;

    public InputReader(InputStream stream) {
      reader = new BufferedReader(new InputStreamReader(stream), 32768);
      tokenizer = null;
    }

    public String next() {
      while (tokenizer == null || !tokenizer.hasMoreTokens()) {
        try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
      return tokenizer.nextToken();
    }

    public int nextInt() {
      return Integer.parseInt(next());
    }

    public long nextLong() {
      return Long.parseLong(next());
    }

    public double nextDouble() {
      return Double.parseDouble(next());
    }
  }
} import java.io.IOException; IOException java.io import java.io.InputStream; InputStream java.io import java.io.PrintWriter; PrintWriter java.io import java.io.BufferedReader; BufferedReader java.io import java.io.InputStreamReader; InputStreamReader java.io import java.util.HashMap; HashMap java.util import java.util.HashSet; HashSet java.util import java.util.StringTokenizer; StringTokenizer java.util public class Main {

  public static void main(String[] args) {
    InputReader in = new InputReader(System.in);
    PrintWriter out = new PrintWriter(System.out);

    int n = in.nextInt();
    int m = in.nextInt();

    HashSet<Integer> food = new HashSet<>();

    int k1 = in.nextInt();
    for (int j = 0; j < k1; j++)
      food.add(in.nextInt());

    for (int i = 1; i < n; i++) {
      int k = in.nextInt();

      HashSet<Integer> food1 = new HashSet<>();

      for (int j = 0; j < k; j++) {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      }
      food = food1;
    }

    out.println(food.size());

    out.close();
  }

  static class InputReader {

    public BufferedReader reader;
    public StringTokenizer tokenizer;

    public InputReader(InputStream stream) {
      reader = new BufferedReader(new InputStreamReader(stream), 32768);
      tokenizer = null;
    }

    public String next() {
      while (tokenizer == null || !tokenizer.hasMoreTokens()) {
        try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
      return tokenizer.nextToken();
    }

    public int nextInt() {
      return Integer.parseInt(next());
    }

    public long nextLong() {
      return Long.parseLong(next());
    }

    public double nextDouble() {
      return Double.parseDouble(next());
    }
  }
} Main public static void main(String[] args) {
    InputReader in = new InputReader(System.in);
    PrintWriter out = new PrintWriter(System.out);

    int n = in.nextInt();
    int m = in.nextInt();

    HashSet<Integer> food = new HashSet<>();

    int k1 = in.nextInt();
    for (int j = 0; j < k1; j++)
      food.add(in.nextInt());

    for (int i = 1; i < n; i++) {
      int k = in.nextInt();

      HashSet<Integer> food1 = new HashSet<>();

      for (int j = 0; j < k; j++) {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      }
      food = food1;
    }

    out.println(food.size());

    out.close();
  } main {
    InputReader in = new InputReader(System.in);
    PrintWriter out = new PrintWriter(System.out);

    int n = in.nextInt();
    int m = in.nextInt();

    HashSet<Integer> food = new HashSet<>();

    int k1 = in.nextInt();
    for (int j = 0; j < k1; j++)
      food.add(in.nextInt());

    for (int i = 1; i < n; i++) {
      int k = in.nextInt();

      HashSet<Integer> food1 = new HashSet<>();

      for (int j = 0; j < k; j++) {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      }
      food = food1;
    }

    out.println(food.size());

    out.close();
  } InputReader in = new InputReader(System.in); in new InputReader(System.in) PrintWriter out = new PrintWriter(System.out); out new PrintWriter(System.out) int n = in.nextInt(); n in.nextInt() in.nextInt in int m = in.nextInt(); m in.nextInt() in.nextInt in HashSet<Integer> food = new HashSet<>(); food new HashSet<>() int k1 = in.nextInt(); k1 in.nextInt() in.nextInt in for (int j = 0; j < k1; j++)
      food.add(in.nextInt()); int j = 0; int j = 0; j 0 j < k1 j k1 j++ j++ j food.add(in.nextInt()); food.add(in.nextInt()) food.add food in.nextInt() in.nextInt in for (int i = 1; i < n; i++) {
      int k = in.nextInt();

      HashSet<Integer> food1 = new HashSet<>();

      for (int j = 0; j < k; j++) {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      }
      food = food1;
    } int i = 1; int i = 1; i 1 i < n i n i++ i++ i {
      int k = in.nextInt();

      HashSet<Integer> food1 = new HashSet<>();

      for (int j = 0; j < k; j++) {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      }
      food = food1;
    } {
      int k = in.nextInt();

      HashSet<Integer> food1 = new HashSet<>();

      for (int j = 0; j < k; j++) {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      }
      food = food1;
    } int k = in.nextInt(); k in.nextInt() in.nextInt in HashSet<Integer> food1 = new HashSet<>(); food1 new HashSet<>() for (int j = 0; j < k; j++) {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      } int j = 0; int j = 0; j 0 j < k j k j++ j++ j {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      } {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      } int a = in.nextInt(); a in.nextInt() in.nextInt in if (food.contains(a))
          food1.add(a); food.contains(a) food.contains food a food1.add(a) food1.add food1 a food = food1 food food1 out.println(food.size()) out.println out food.size() food.size food out.close() out.close out String[] args args static class InputReader {

    public BufferedReader reader;
    public StringTokenizer tokenizer;

    public InputReader(InputStream stream) {
      reader = new BufferedReader(new InputStreamReader(stream), 32768);
      tokenizer = null;
    }

    public String next() {
      while (tokenizer == null || !tokenizer.hasMoreTokens()) {
        try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
      return tokenizer.nextToken();
    }

    public int nextInt() {
      return Integer.parseInt(next());
    }

    public long nextLong() {
      return Long.parseLong(next());
    }

    public double nextDouble() {
      return Double.parseDouble(next());
    }
  } InputReader public BufferedReader reader; reader public StringTokenizer tokenizer; tokenizer public InputReader(InputStream stream) {
      reader = new BufferedReader(new InputStreamReader(stream), 32768);
      tokenizer = null;
    } InputReader {
      reader = new BufferedReader(new InputStreamReader(stream), 32768);
      tokenizer = null;
    } reader = new BufferedReader(new InputStreamReader(stream), 32768) reader new BufferedReader(new InputStreamReader(stream), 32768) tokenizer = null tokenizer null InputStream stream stream public String next() {
      while (tokenizer == null || !tokenizer.hasMoreTokens()) {
        try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
      return tokenizer.nextToken();
    } next {
      while (tokenizer == null || !tokenizer.hasMoreTokens()) {
        try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
      return tokenizer.nextToken();
    } while (tokenizer == null || !tokenizer.hasMoreTokens()) {
        try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      } tokenizer == null || !tokenizer.hasMoreTokens() tokenizer == null tokenizer null !tokenizer.hasMoreTokens() tokenizer.hasMoreTokens() tokenizer.hasMoreTokens tokenizer {
        try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      } try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        } catch (IOException e) {
          throw new RuntimeException(e);
        } IOException e {
          throw new RuntimeException(e);
        } throw new RuntimeException(e); new RuntimeException(e) {
          tokenizer = new StringTokenizer(reader.readLine());
        } tokenizer = new StringTokenizer(reader.readLine()) tokenizer new StringTokenizer(reader.readLine()) return tokenizer.nextToken(); tokenizer.nextToken() tokenizer.nextToken tokenizer public int nextInt() {
      return Integer.parseInt(next());
    } nextInt {
      return Integer.parseInt(next());
    } return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next public long nextLong() {
      return Long.parseLong(next());
    } nextLong {
      return Long.parseLong(next());
    } return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next public double nextDouble() {
      return Double.parseDouble(next());
    } nextDouble {
      return Double.parseDouble(next());
    } return Double.parseDouble(next()); Double.parseDouble(next()) Double.parseDouble Double next() next public class Main {

  public static void main(String[] args) {
    InputReader in = new InputReader(System.in);
    PrintWriter out = new PrintWriter(System.out);

    int n = in.nextInt();
    int m = in.nextInt();

    HashSet<Integer> food = new HashSet<>();

    int k1 = in.nextInt();
    for (int j = 0; j < k1; j++)
      food.add(in.nextInt());

    for (int i = 1; i < n; i++) {
      int k = in.nextInt();

      HashSet<Integer> food1 = new HashSet<>();

      for (int j = 0; j < k; j++) {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      }
      food = food1;
    }

    out.println(food.size());

    out.close();
  }

  static class InputReader {

    public BufferedReader reader;
    public StringTokenizer tokenizer;

    public InputReader(InputStream stream) {
      reader = new BufferedReader(new InputStreamReader(stream), 32768);
      tokenizer = null;
    }

    public String next() {
      while (tokenizer == null || !tokenizer.hasMoreTokens()) {
        try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
      return tokenizer.nextToken();
    }

    public int nextInt() {
      return Integer.parseInt(next());
    }

    public long nextLong() {
      return Long.parseLong(next());
    }

    public double nextDouble() {
      return Double.parseDouble(next());
    }
  }
} public class Main {

  public static void main(String[] args) {
    InputReader in = new InputReader(System.in);
    PrintWriter out = new PrintWriter(System.out);

    int n = in.nextInt();
    int m = in.nextInt();

    HashSet<Integer> food = new HashSet<>();

    int k1 = in.nextInt();
    for (int j = 0; j < k1; j++)
      food.add(in.nextInt());

    for (int i = 1; i < n; i++) {
      int k = in.nextInt();

      HashSet<Integer> food1 = new HashSet<>();

      for (int j = 0; j < k; j++) {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      }
      food = food1;
    }

    out.println(food.size());

    out.close();
  }

  static class InputReader {

    public BufferedReader reader;
    public StringTokenizer tokenizer;

    public InputReader(InputStream stream) {
      reader = new BufferedReader(new InputStreamReader(stream), 32768);
      tokenizer = null;
    }

    public String next() {
      while (tokenizer == null || !tokenizer.hasMoreTokens()) {
        try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
      return tokenizer.nextToken();
    }

    public int nextInt() {
      return Integer.parseInt(next());
    }

    public long nextLong() {
      return Long.parseLong(next());
    }

    public double nextDouble() {
      return Double.parseDouble(next());
    }
  }
} Main
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Main {

  public static void main(String[] args) {
    InputReader in = new InputReader(System.in);
    PrintWriter out = new PrintWriter(System.out);

    int n = in.nextInt();
    int m = in.nextInt();

    HashSet<Integer> food = new HashSet<>();

    int k1 = in.nextInt();
    for (int j = 0; j < k1; j++)
      food.add(in.nextInt());

    for (int i = 1; i < n; i++) {
      int k = in.nextInt();

      HashSet<Integer> food1 = new HashSet<>();

      for (int j = 0; j < k; j++) {
        int a = in.nextInt();
        if (food.contains(a))
          food1.add(a);
      }
      food = food1;
    }

    out.println(food.size());

    out.close();
  }

  static class InputReader {

    public BufferedReader reader;
    public StringTokenizer tokenizer;

    public InputReader(InputStream stream) {
      reader = new BufferedReader(new InputStreamReader(stream), 32768);
      tokenizer = null;
    }

    public String next() {
      while (tokenizer == null || !tokenizer.hasMoreTokens()) {
        try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
      return tokenizer.nextToken();
    }

    public int nextInt() {
      return Integer.parseInt(next());
    }

    public long nextLong() {
      return Long.parseLong(next());
    }

    public double nextDouble() {
      return Double.parseDouble(next());
    }
  }
}