#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const long long maxn = 1e5 + 7;
const long long maxe = 1e6 + 7;
const long long INF = 1e9 + 7;
const double PI = acos(-1);
int dx[4] = {0, 0, 1, -1};
int dy[4] = {-1, 1, 0, 0};
inline void Max(int &a, int b) {
  if (b > a) a = b;
}
inline void Min(int &a, int b) {
  if (a == -1 || b < a) a = b;
}
int n, m, N;
vector<int> li;
vector<pair<int, int> > G[maxn];
vector<int> team[maxn];
int vis[maxe];
int id[maxn];
int ok[maxn][2];
int cnt = 0;
bool vv[maxe];
void dfs(int v, int ty) {
  id[v] = ok[v][ty];
  for (int i = 0; i < G[v].size(); i++) {
    int u = G[v][i].first;
    int k = G[v][i].second;
    if (vv[k]) continue;
    vv[k] = true;
    if (ok[u][3 - ty]) {
      cnt++;
      dfs(u, 3 - ty);
    } else {
      dfs(u, ty);
    }
  }
}
bool solve() {
  memset(vv, false, sizeof(vv));
  for (int i = 0; i < N; i++) {
    vis[i] = rand() % 2 + 1;
  }
  for (int i = 1; i <= n; i++) {
    ok[i][1] = ok[i][2] = 0;
    id[i] = 0;
    for (int j = 0; j < team[i].size(); j++)
      ok[i][vis[team[i][j]]] = li[team[i][j]];
  }
  cnt = 0;
  for (int i = 1; i <= n; i++) {
    if (!id[i]) {
      if (ok[i][1]) {
        dfs(i, 1);
      } else
        dfs(i, 2);
    }
  }
  if (cnt * 2 >= m) return true;
  return false;
}
int main() {
  srand(time(NULL));
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    G[u].push_back(make_pair(v, i));
    G[v].push_back(make_pair(u, i));
  }
  for (int i = 1; i <= n; i++) {
    int nu = 0;
    scanf("%d", &nu);
    for (int j = 0; j < nu; j++) {
      int t;
      scanf("%d", &t);
      li.push_back(t);
      team[i].push_back(t);
    }
  }
  sort(li.begin(), li.end());
  li.erase(unique(li.begin(), li.end()), li.end());
  N = li.size();
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < team[i].size(); j++) {
      team[i][j] = lower_bound(li.begin(), li.end(), team[i][j]) - li.begin();
    }
  }
  while (1) {
    if (solve()) break;
  }
  for (int i = 1; i <= n; i++) {
    printf("%d ", id[i]);
  }
  cout << endl;
  for (int i = 0; i < N; i++) {
    printf("%d ", vis[i]);
  }
  cout << endl;
  return 0;
}
