#include <bits/stdc++.h>
using namespace std;
ifstream fin("AAtest.in.txt");
long long n, k, ul[300005], mit, l, all[300005], kul[300005], x, y, vas, lii;
string s;
vector<long long> kat[300005];
bool on[300005];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cerr.tie(0);
  cin >> n >> k;
  cin >> s;
  for (int i = 0; i < k; i++) {
    ul[i] = i;
    all[i] = 1;
    kul[i] = 1;
    cin >> mit;
    for (int j = 0; j < mit; j++) {
      cin >> l;
      kat[l].push_back(i);
    }
  }
  for (int i = 1; i <= n; i++) {
    mit = 0;
    if (kat[i].size() == 1) {
      x = kat[i][0];
      mit = s[i - 1] - '0';
      while (ul[x] != x) {
        mit = mit xor (on[x]);
        x = ul[x];
      }
      mit = mit xor on[x];
      if (!mit) {
        vas += kul[x];
        on[x] = on[x] xor 1;
      }
      kul[x] = 1e6;
    } else if (kat[i].size() == 2) {
      x = kat[i][0];
      mit = s[i - 1] - '0';
      while (ul[x] != x) {
        mit = mit xor (on[x]);
        x = ul[x];
      }
      mit = mit xor on[x];
      y = kat[i][1];
      while (ul[y] != y) {
        mit = mit xor (on[y]);
        y = ul[y];
      }
      mit = mit xor on[y];
      if (x != y) {
        if (all[x] > all[y]) swap(x, y);
        ul[x] = y;
        if (!mit) {
          if (kul[x] < kul[y]) {
            vas += kul[x];
            on[x] = on[x] xor 1;
          } else {
            vas += kul[y];
            on[y] = on[y] xor 1;
          }
          kul[y] = abs(kul[x] - kul[y]);
        } else
          kul[y] += kul[x];
        kul[y] = min(kul[y], (long long)1e6);
        if (on[y]) on[x] = on[x] xor 1;
        all[y] = max(all[y], all[x] + 1);
      }
    }
    cout << vas << "\n";
  }
}
