fork download
  1. #include <bits/stdc++.h>
  2.  
  3. #define ll long long
  4. #define el cout << '\n'
  5. #define bit(mask, i) ((mask >> i) & 1)
  6. #define BIT(n) (1ll << n)
  7. #define set_off(mask, i) (mask & ~BIT(i))
  8.  
  9. using namespace std;
  10.  
  11. const int maxn = 1e6;
  12. const int maxm = 20;
  13. const int MOD = 1e9 + 7;
  14.  
  15. int n, m;
  16. ll dp[BIT(maxm)], p2[BIT(maxm) + 10], ans = 0;
  17.  
  18. int main()
  19. {
  20. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  21. if (fopen("CNKCE.INP", "r"))
  22. {
  23. freopen("CNKCE.INP", "r", stdin);
  24. freopen("CNKCE.OUT", "w", stdout);
  25. }
  26. cin >> n >> m;
  27. for (int i = 1; i <= n; i++)
  28. {
  29. ll mask = 0;
  30. int k;
  31. cin >> k;
  32. for (int j = 1; j <= k; j++)
  33. {
  34. int x;
  35. cin >> x;
  36. x--;
  37. mask += BIT(x);
  38. }
  39. dp[mask]++;
  40. }
  41. for (int i = 0; i < m; i++)
  42. for (int mask = 0; mask < BIT(m); mask++)
  43. if (bit(mask, i))
  44. dp[mask] += dp[set_off(mask, i)];
  45. p2[0] = 1;
  46. for (int i = 1; i <= BIT(maxm); i++)
  47. p2[i] = p2[i - 1] * 2 % MOD;
  48. for (int mask = 0; mask < BIT(m); mask++)
  49. if (__builtin_popcount(mask) % 2 == m % 2)
  50. {
  51. ans += p2[dp[mask]] - 1;
  52. ans %= MOD;
  53. }
  54. else
  55. {
  56. ans -= p2[dp[mask]] - 1;
  57. ans %= MOD;
  58. }
  59. cout << (ans + MOD) % MOD;
  60. }
  61.  
Success #stdin #stdout 0.01s 13764KB
stdin
Standard input is empty
stdout
Standard output is empty