#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
inline double cross(double x1, double y1010101010101, double x2, double y2) {
  return x1 * x2 + y1010101010101 * y2;
}
inline double len(double x, double y) { return sqrt(x * x + y * y); }
inline double angle(double x1, double y1010101010101, double x2, double y2) {
  if (x1 == 0 && y1010101010101 == 0) return pi;
  if (x2 == 0 && y2 == 0) return pi;
  return acos(cross(x1, y1010101010101, x2, y2) / len(x1, y1010101010101) /
              len(x2, y2));
}
int n, x[100005], y[100005], cur = 0;
struct data {
  double tx, ty;
  int fx, fy;
  int cx, cy;
  data operator~() {
    data ans = *this;
    ans.tx = -ans.tx;
    ans.ty = -ans.ty;
    ans.cx = -ans.cx;
    ans.cy = -ans.cy;
    return ans;
  }
} d[100005 << 5];
inline data add(int x, int y, int cx, int cy) {
  data ans;
  ans.tx = d[x].tx * cx + d[y].tx * cy;
  ans.ty = d[x].ty * cx + d[y].ty * cy;
  ans.cx = cx;
  ans.cy = cy;
  ans.fx = x;
  ans.fy = y;
  return ans;
}
int neg[100005 << 5];
inline void dump(int x) {
  if (x <= n) return;
  neg[d[x].fx] = neg[x] * d[x].cx;
  neg[d[x].fy] = neg[x] * d[x].cy;
  dump(d[x].fx);
  dump(d[x].fy);
}
inline void dfs(int x, int y, int z, int w) {
  if (z == n + 1) {
    d[++cur] = ~d[x];
    d[++cur] = ~d[y];
    vector<int> t;
    t.push_back(x);
    t.push_back(y);
    t.push_back(cur - 1);
    t.push_back(cur);
    for (int i = 0; i < 4; i += 2)
      for (int j = 1; j < 4; j += 2) {
        int u = t[i], v = t[j];
        if (len(d[u].tx + d[v].tx, d[u].ty + d[v].ty) <= 1500000.0) {
          if (i == 2)
            neg[x] = -1;
          else
            neg[x] = 1;
          if (j == 3)
            neg[y] = -1;
          else
            neg[y] = 1;
          dump(x);
          dump(y);
          return;
        }
      }
  }
  d[++cur] = ~d[x];
  d[++cur] = ~d[y];
  d[++cur] = ~d[z];
  vector<int> t;
  t.push_back(x);
  t.push_back(y);
  t.push_back(z);
  t.push_back(cur - 2);
  t.push_back(cur - 1);
  t.push_back(cur);
  for (int i = 0; i < 6; i++)
    for (int j = 0; j < i; j++) {
      if ((i % 3) == (j % 3)) continue;
      int a = t[i], b = t[j];
      if (angle(d[a].tx, d[a].ty, d[b].tx, d[b].ty) >= 2.0 * pi / 3) {
        d[++cur] = add(a, b, 1, 1);
        int nxt = 3 - (i % 3) - (j % 3);
        if (nxt == 0) dfs(cur, x, w, w + 1);
        if (nxt == 1) dfs(cur, y, w, w + 1);
        if (nxt == 2) dfs(cur, z, w, w + 1);
        return;
      }
    }
}
int main() {
  scanf("%d", &n);
  if (n == 1) return puts("1"), 0;
  for (int i = 1; i <= n; i++) scanf("%d%d", &x[i], &y[i]);
  for (int i = 1; i <= n; i++) {
    d[i].tx = x[i];
    d[i].ty = y[i];
    d[i].fx = i;
    d[i].fy = 0;
    d[i].cx = 1;
    d[i].cy = 0;
  }
  cur = n;
  dfs(1, 2, 3, 4);
  for (int i = 1; i <= n; i++) printf("%d ", neg[i]);
  return 0;
}
