// Limit: 65536K 4000ms// Used : 12996K 1813ms#include <iostream>#include <vector>#include <algorithm>#include <numeric>usingnamespacestd;intsolve(intN,intM,vector<vector<int>>&fav){// dp[i][S]: the number of patterns that cow 0-i use S(set) barnsvector<vector<int>>dp(2,vector<int>(1<<M));dp[0][0]=1;for(inti=0;i<N;i++){for(intj=0;j<fav[i].size();j++){intbarn_bit=(1<<fav[i][j]);for(ints=0;s<(1<<M);s++){if(!(s&barn_bit)){dp[(i+1)&1][s|barn_bit]+=dp[i&1][s];}}}fill(dp[i&1].begin(),dp[i&1].end(),0);}returnaccumulate(dp[N&1].begin(),dp[N&1].end(),0);}intmain(){cin.tie(0);ios::sync_with_stdio(false);// read input dataintN,M;cin>>N>>M;vector<vector<int>>fav(N);for(inti=0;i<N;i++){intc;cin>>c;for(intj=0;j<c;j++){intb;cin>>b;fav[i].push_back(b-1);// 0-base index}}// solve it and print answerintans=solve(N,M,fav);cout<<ans<<endl;}