#include <bits/stdc++.h>
using namespace std;
const int N = 2005;
int n, ans[N];
struct SAT {
  inline int get(int x) { return x > 0 ? x * 2 - 2 : -x * 2 - 1; }
  int m;
  bitset<N> a[N];
  void read() {
    int t1, t2;
    for (int i = 1; i <= m; i++) {
      cin >> t1 >> t2;
      t1 = get(t1);
      t2 = get(t2);
      a[t1 ^ 1].set(t2);
      a[t2 ^ 1].set(t1);
    }
  }
  void floyd() {
    for (int i = 0; i < n * 2; i++)
      for (int j = 0; j < n * 2; j++)
        if (a[j][i]) a[j] |= a[i];
  }
  void solve() {
    floyd();
    for (int i = 0; i < n * 2; i++)
      if (a[i][i ^ 1])
        for (int j = 0; j < n * 2; j++) a[i].set(j), a[j].set(i ^ 1);
    floyd();
  }
  void dfs(int pos) {
    if (ans[pos] != -1) return;
    ans[pos] = 1;
    ans[pos ^ 1] = 0;
    for (int i = 0; i < n * 2; i++)
      if (a[pos][i]) ans[i] = 1, ans[i ^ 1] = 0;
  }
  void calc(int x, int y) {
    dfs(x);
    dfs(y ^ 1);
    for (int i = 0; i < n * 2; i++)
      if (ans[i] == -1 && !a[i][i ^ 1]) dfs(i);
  }
} f, g;
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> f.m >> g.m;
  f.read();
  f.solve();
  g.read();
  g.solve();
  memset(ans, -1, sizeof(ans));
  for (int i = 0; i < n * 2; i++)
    for (int j = 0; j < n * 2; j++)
      if (i != j && f.a[i][j] != g.a[i][j]) {
        if (f.a[i][j])
          g.calc(i, j);
        else
          f.calc(i, j);
        for (int k = 0; k < n; k++) cout << ans[k * 2] << ' ';
        cout << endl;
        return 0;
      }
  cout << "SIMILAR" << endl;
  return 0;
}
