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;
long long read() {
  long long x = 0, F = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') F = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = (x << 3) + (x << 1) + c - '0';
    c = getchar();
  }
  return x * F;
}
int add(int a, int b) {
  return (a + b >= 998244353) ? a + b - 998244353 : a + b;
}
int dec(int a, int b) { return (a - b < 0) ? a - b + 998244353 : a - b; }
int mul(int a, int b) { return 1LL * a * b % 998244353; }
long long pabs(long long x) { return x < 0 ? -x : x; }
int n, ans[2000 + 5];
struct twosat {
  int m;
  bitset<2000> G[2000 + 5];
  int Cg(int x) {
    if (x < 0) return -x + n - 1;
    return x - 1;
  }
  int rev(int x) {
    if (x >= n)
      return x - n;
    else
      return x + n;
  }
  void getin() {
    for (int i = 1; i <= m; i++) {
      int x = Cg(read()), y = Cg(read());
      G[rev(x)].set(y);
      G[rev(y)].set(x);
    }
  }
  void Floyd() {
    for (int k = 0; k < 2 * n; k++)
      for (int i = 0; i < 2 * n; i++)
        if (G[i][k]) G[i] |= G[k];
  }
  void Build() {
    Floyd();
    for (int i = 0; i < 2 * n; i++)
      if (G[i][rev(i)]) {
        for (int j = 0; j < 2 * n; j++) G[i].set(j), G[j].set(rev(i));
      }
    Floyd();
  }
  void dfs(int x) {
    ans[x] = 1, ans[rev(x)] = 0;
    for (int i = 0; i < n * 2; i++)
      if (G[x][i]) ans[i] = 1, ans[rev(i)] = 0;
  }
  void solve(int a, int b) {
    dfs(a), dfs(rev(b));
    for (int i = 0; i < 2 * n; i++)
      if (ans[i] == -1 && !G[i][rev(i)]) dfs(i);
  }
} f, g;
int main() {
  n = read(), f.m = read(), g.m = read();
  f.getin(), g.getin();
  f.Build(), g.Build();
  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.G[i][j] != g.G[i][j]) {
        (f.G[i][j]) ? g.solve(i, j) : f.solve(i, j);
        for (int k = 0; k < n; k++) printf("%d ", ans[k]);
        return 0;
      }
  printf("SIMILAR");
}
