func_code_string: #include <bits/stdc++.h>   const long long N = 1e6 + 10;   const long long mod = 1e9 + 7;   long long dir[4][2] = {0, 1, 1, 0, 0, -1, -1, 0};   using namespace std;   struct node {     long long x, y, id;     node() {}     node(long long x, long long y, long long i) : x(x), y(y), id(i) {}   };   long long ans[N];   stack<node> q;   long long ok(node a, node b) {     long long x = a.x + b.x, y = a.y + b.y;     if (x * x + y * y <= 1e12) return 1;     x = a.x - b.x;     y = a.y - b.y;     if (x * x + y * y <= 1e12) return 2;     return 0;   }   long long be[N], dp[N];   long long dfs(long long x) {     if (dp[x] != -2) return dp[x];     if (be[x] == 0) return dp[x] = ans[x];     dp[x] = ans[x] * dfs(be[x]);     return dp[x];   }   int32_t main() {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     long long n;     cin >> n;     long long x, y;     for (long long i = 1; i <= n; i++) cin >> x >> y, q.push(node(x, y, i));     if (n == 1) return cout << 1, 0;     long long cc = n;     while (q.size() > 2) {       node t1 = q.top();       q.pop();       node t2 = q.top();       q.pop();       node t3 = q.top();       q.pop();       long long t;       if (t = ok(t1, t2)) {         if (t == 1) {           ans[t1.id] = 1, ans[t2.id] = 1,           q.push(node(t1.x + t2.x, t1.y + t2.y, ++cc)), q.push(t3);           be[t1.id] = be[t2.id] = cc;         } else {           ans[t1.id] = 1, ans[t2.id] = -1,           q.push(node(t1.x - t2.x, t1.y - t2.y, ++cc)), q.push(t3);           be[t1.id] = be[t2.id] = cc;         }       } else if (t = ok(t1, t3)) {         if (t == 1) {           ans[t1.id] = 1, ans[t3.id] = 1,           q.push(node(t1.x + t3.x, t1.y + t3.y, ++cc)), q.push(t2);           be[t1.id] = be[t3.id] = cc;         } else {           ans[t1.id] = 1, ans[t3.id] = -1,           q.push(node(t1.x - t3.x, t1.y - t3.y, ++cc)), q.push(t2);           be[t1.id] = be[t3.id] = cc;         }       } else if (t = ok(t3, t2)) {         if (t == 1) {           ans[t3.id] = 1, ans[t2.id] = 1,           q.push(node(t3.x + t2.x, t3.y + t2.y, ++cc)), q.push(t1);           be[t3.id] = be[t2.id] = cc;         } else {           ans[t3.id] = 1, ans[t2.id] = -1,           q.push(node(t3.x - t2.x, t3.y - t2.y, ++cc)), q.push(t1);           be[t3.id] = be[t2.id] = cc;         }       }     }     {       node t1 = q.top();       q.pop();       node t2 = q.top();       long long xx = t1.x + t2.x, yy = t1.y + t2.y;       if (xx * xx + yy * yy <= 2.25e12)         ans[t1.id] = ans[t2.id] = 1;       else         ans[t1.id] = 1, ans[t2.id] = -1;     }     for (long long i = 1; i <= cc; i++) dp[i] = -2;     for (long long i = 1; i <= n; i++)       if (dp[i] == -2) dp[i] = dfs(i);     for (long long i = 1; i <= n; i++) cout << dp[i] <<    ;     return 0;   }   