Problem: For a vector \vec{v} = (x, y), define |v| = √{x^2 + y^2}.

Allen had a bit too much to drink at the bar, which is at the origin. There are n vectors \vec{v_1}, \vec{v_2}, ⋅⋅⋅, \vec{v_n}. Allen will make n moves. As Allen's sense of direction is impaired, during the i-th move he will either move in the direction \vec{v_i} or -\vec{v_i}. In other words, if his position is currently p = (x, y), he will either move to p + \vec{v_i} or p - \vec{v_i}.

Allen doesn't want to wander too far from home (which happens to also be the bar). You need to help him figure out a sequence of moves (a sequence of signs for the vectors) such that his final position p satisfies |p| ≤ 1.5 ⋅ 10^6 so that he can stay safe.

Input

The first line contains a single integer n (1 ≤ n ≤ 10^5) — the number of moves.

Each of the following lines contains two space-separated integers x_i and y_i, meaning that \vec{v_i} = (x_i, y_i). We have that |v_i| ≤ 10^6 for all i.

Output

Output a single line containing n integers c_1, c_2, ⋅⋅⋅, c_n, each of which is either 1 or -1. Your solution is correct if the value of p = ∑_{i = 1}^n c_i \vec{v_i}, satisfies |p| ≤ 1.5 ⋅ 10^6.

It can be shown that a solution always exists under the given constraints.

Examples

Input

3
999999 0
0 999999
999999 0


Output

1 1 -1 


Input

1
-824590 246031


Output

1 


Input

8
-67761 603277
640586 -396671
46147 -122580
569609 -2112
400 914208
131792 309779
-850150 -486293
5272 721899


Output

1 1 1 1 1 1 1 -1 

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
long long int n;
long long int x[100005];
long long int y[100005];
long long int sign[100005];
void print_ans() {
  for (long long int i = 1; i <= n; i++) {
    cout << sign[i] << " ";
  }
  cout << "\n";
  exit(0);
}
long long int len(long long int x1, long long int y1, long long int x2,
                  long long int y2) {
  return ((x1 + x2) * (x1 + x2)) + ((y1 + y2) * (y1 + y2));
}
int main() {
  cin >> n;
  for (long long int i = 1; i <= n; i++) {
    cin >> x[i] >> y[i];
  }
  if (n == 1) {
    sign[1] = 1;
    print_ans();
  }
  set<pair<long long int, long long int>> s1;
  set<pair<long long int, long long int>> s2;
  s1.insert({1, 1});
  s2.insert({2, 1});
  long long int x1 = x[1];
  long long int x2 = x[2];
  long long int y1 = y[1];
  long long int y2 = y[2];
  long long int mx_len = 1e12;
  long long int sign1 = 1;
  long long int sign2 = 1;
  for (long long int i = 3; i <= n; i++) {
    if (len(x1, y1, x2, y2) <= mx_len) {
      if (s2.size() > s1.size()) {
        swap(s1, s2);
        swap(sign1, sign2);
      }
      for (auto it : s2) {
        if (sign1 == -1) {
          s1.insert({it.first, -it.second * sign2});
        } else {
          s1.insert({it.first, it.second * sign2});
        }
      }
      s2.clear();
      s2.insert({i, 1});
      x1 += x2;
      y1 += y2;
      x2 = x[i];
      y2 = y[i];
      sign2 = 1;
    } else if (len(x1, y1, -x2, -y2) <= mx_len) {
      if (s2.size() > s1.size()) {
        swap(s1, s2);
        swap(sign1, sign2);
        sign1 *= -1;
      } else {
        sign2 *= -1;
      }
      for (auto it : s2) {
        if (sign1 == -1) {
          s1.insert({it.first, -it.second * sign2});
        } else {
          s1.insert({it.first, it.second * sign2});
        }
      }
      s2.clear();
      s2.insert({i, 1});
      x1 -= x2;
      y1 -= y2;
      x2 = x[i];
      y2 = y[i];
      sign2 = 1;
    } else if (len(x1, y1, x[i], y[i]) <= mx_len) {
      if (sign1 == -1) {
        s1.insert({i, -1});
      } else {
        s1.insert({i, 1});
      }
      x1 += x[i];
      y1 += y[i];
    } else if (len(x1, y1, -x[i], -y[i]) <= mx_len) {
      if (sign1 == -1) {
        s1.insert({i, 1});
      } else {
        s1.insert({i, -1});
      }
      x1 -= x[i];
      y1 -= y[i];
    } else if (len(x2, y2, x[i], y[i]) <= mx_len) {
      if (sign2 == -1) {
        s2.insert({i, -1});
      } else {
        s2.insert({i, 1});
      }
      x2 += x[i];
      y2 += y[i];
    } else if (len(x2, y2, -x[i], -y[i]) <= mx_len) {
      if (sign2 == -1) {
        s2.insert({i, 1});
      } else {
        s2.insert({i, -1});
      }
      x2 -= x[i];
      y2 -= y[i];
    }
  }
  if (len(x1, y1, x2, y2) > len(x1, y1, -x2, -y2)) {
    sign2 *= -1;
    x1 -= x2;
    y1 -= y2;
  } else {
    x1 += x2;
    y1 += y2;
  }
  for (auto it : s1) {
    sign[it.first] = it.second * sign1;
  }
  for (auto it : s2) {
    sign[it.first] = it.second * sign2;
  }
  print_ans();
}