#include <bits/stdc++.h>
const int N = 50001;
using namespace std;
vector<pair<int, int> > v;
vector<int> g[N];
int l[N], t[N], c[1000005];
int main() {
  srand(time(0));
  int n, e, i, j, a, b;
  scanf("%d%d", &n, &e);
  for (i = 0; i < e; i++) {
    scanf("%d%d", &a, &b);
    a--;
    b--;
    v.push_back(make_pair(a, b));
  }
  int T = 0;
  for (i = 0; i < n; i++) {
    scanf("%d", &l[i]);
    for (j = 0; j < l[i]; j++) {
      scanf("%d", &a);
      if (a > T) T = a;
      --a;
      g[i].push_back(a);
    }
    random_shuffle(g[i].begin(), g[i].end());
  }
  do {
    for (i = 0; i < n; i++)
      t[i] = g[i][1LL * rand() % 10007 * rand() % 3337 % l[i]];
    for (i = 0; i < T; i++) c[i] = rand() & 1;
    int cnt = 0;
    bool ok = false;
    for (i = 0; i < e; i++) {
      if (c[t[v[i].first]] != c[t[v[i].second]]) ++cnt;
      if (cnt >= (e >> 1)) {
        ok = true;
        break;
      }
      if (cnt + e - i - 1 < (e >> 1)) {
        ok = false;
        break;
      }
    }
    if (ok) break;
  } while (1);
  for (i = 0; i < n; i++) printf("%d ", t[i] + 1);
  printf("\n");
  for (i = 0; i < T; i++) printf("%d ", c[i] + 1);
  return 0;
}
