Little Artem is a very smart programmer. He knows many different difficult algorithms. Recently he has mastered in 2-SAT one.

In computer science, 2-satisfiability (abbreviated as 2-SAT) is the special case of the problem of determining whether a conjunction (logical AND) of disjunctions (logical OR) have a solution, in which all disjunctions consist of no more than two arguments (variables). For the purpose of this problem we consider only 2-SAT formulas where each disjunction consists of exactly two arguments.

Consider the following 2-SAT problem as an example: <image>. Note that there might be negations in 2-SAT formula (like for x1 and for x4).

Artem now tries to solve as many problems with 2-SAT as possible. He found a very interesting one, which he can not solve yet. Of course, he asks you to help him. 

The problem is: given two 2-SAT formulas f and g, determine whether their sets of possible solutions are the same. Otherwise, find any variables assignment x such that f(x) ≠ g(x). 

Input

The first line of the input contains three integers n, m1 and m2 (1 ≤ n ≤ 1000, 1 ≤ m1, m2 ≤ n2) — the number of variables, the number of disjunctions in the first formula and the number of disjunctions in the second formula, respectively.

Next m1 lines contains the description of 2-SAT formula f. The description consists of exactly m1 pairs of integers xi ( - n ≤ xi ≤ n, xi ≠ 0) each on separate line, where xi > 0 corresponds to the variable without negation, while xi < 0 corresponds to the variable with negation. Each pair gives a single disjunction. Next m2 lines contains formula g in the similar format.

Output

If both formulas share the same set of solutions, output a single word "SIMILAR" (without quotes). Otherwise output exactly n integers xi (<image>) — any set of values x such that f(x) ≠ g(x).

Examples

Input

2 1 1
1 2
1 2


Output

SIMILAR


Input

2 1 1
1 2
1 -2


Output

0 0 

Note

First sample has two equal formulas, so they are similar by definition.

In second sample if we compute first function with x1 = 0 and x2 = 0 we get the result 0, because <image>. But the second formula is 1, because <image>.
#include <bits/stdc++.h>
using namespace std;
const int N = 2005;
struct SAT {
  int n, m, sol;
  int c[N];
  bitset<N> g[N];
  void read(int _n, int _m) {
    int iu, iv;
    n = _n;
    m = _m;
    for (int i = 1; i <= m; i++) {
      scanf("%d%d", &iu, &iv);
      if (iu > 0)
        iu = (iu - 1) << 1 | 1;
      else
        iu = (-iu - 1) << 1;
      if (iv > 0)
        iv = (iv - 1) << 1 | 1;
      else
        iv = (-iv - 1) << 1;
      g[iu ^ 1][iv] = g[iv ^ 1][iu] = 1;
    }
    for (int i = 0; i < (n << 1); i++) g[i][i] = 1;
    for (int k = 0; k < (n << 1); k++)
      for (int i = 0; i < (n << 1); i++)
        if (g[i][k]) g[i] |= g[k];
    sol = 1;
    for (int i = 0; i < (n << 1); i++)
      if (g[i][i ^ 1] && g[i ^ 1][i]) sol = 0;
    if (sol) {
      for (int i = 0; i < (n << 1); i++) c[i] = -1;
      for (int i = 0; i < (n << 1); i++)
        if (g[i][i ^ 1]) color(i ^ 1);
    }
  }
  void color(int u) {
    if (~c[u]) return;
    c[u] = 1;
    c[u ^ 1] = 0;
    for (int v = 0; v < (n << 1); v++)
      if (g[u][v]) color(v);
  }
  void solve(int c1 = -1, int c2 = -1) {
    if (~c1) color(c1);
    if (~c2) color(c2);
    for (int i = 0; i < (n << 1); i++)
      if (c[i] == -1) color(i);
    for (int i = 0; i < n; i++) c[i << 1] ? printf("0 ") : printf("1 ");
  }
} f, g;
int n, m1, m2;
inline bool Solve(SAT &f, SAT &g) {
  if (!f.sol) return 0;
  if (!g.sol) return f.solve(), 1;
  for (int i = 0; i < (n << 1); i++)
    if (f.c[i] != 0 && g.c[i] == 0) return f.solve(i), 1;
  for (int i = 0; i < (n << 1); i++)
    if (f.c[i] == -1)
      for (int j = 0; j < (n << 1); j++)
        if (f.c[j] == -1)
          if (!f.g[i][j] && g.g[i][j]) return f.solve(i, j ^ 1), 1;
  return 0;
}
int main() {
  scanf("%d%d%d", &n, &m1, &m2);
  f.read(n, m1);
  g.read(n, m2);
  if (!Solve(f, g) && !Solve(g, f)) printf("SIMILAR\n");
  return 0;
}
