func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   inline void read(T &x) {     char c;     bool nega = 0;     while ((!isdigit(c = getchar())) && (c !=  - ))       ;     if (c ==  - ) {       nega = 1;       c = getchar();     }     x = c - 48;     while (isdigit(c = getchar())) x = x * 10 + c - 48;     if (nega) x = -x;   }   template <typename T>   inline void writep(T x) {     if (x > 9) writep(x / 10);     putchar(x % 10 + 48);   }   template <typename T>   inline void write(T x) {     if (x < 0) {       putchar( - );       x = -x;     }     writep(x);   }   template <typename T>   inline void writeln(T x) {     write(x);     putchar(  n );   }   int n;   int ans[100001];   const long long inf = 2250000000000;   inline long long cal(const pair<pair<long long, long long>, long long> &first) {     return first.first.first * first.first.first +            first.first.second * first.first.second;   }   inline long long mul(long long first, long long second) {     return first * first + second * second;   }   inline bool cmp(const pair<pair<long long, long long>, long long> &a,                   const pair<pair<long long, long long>, long long> &b) {     return cal(a) < cal(b);   }   pair<pair<long long, long long>, long long> a[100001];   void enter() {     read(n);     for (int i = 0; i < n; i++) {       read(a[i].first.first);       read(a[i].first.second);       a[i].second = i;     }     sort(a, a + n, cmp);   }   void add(long long &first, long long second) { first = first + second; }   void sub(long long &first, long long second) { first = first - second; }   void progress() {     long long first = 0, second = 0;     long long xx = 0, yy = 0;     for (int i = 0; i < n; i++) {       add(xx, a[i].first.first);       add(yy, a[i].first.second);       if (mul(first + a[i].first.first, second + a[i].first.second) <=           mul(first, second)) {         add(second, a[i].first.second);         add(first, a[i].first.first);         ans[a[i].second] = 1;       } else {         sub(second, a[i].first.second);         sub(first, a[i].first.first);         ans[a[i].second] = -1;       }     }     while (mul(first, second) > inf) {       for (int i = n - 1; i >= 0; i--) {         if (ans[a[i].second] == -1 &&             mul(first + 2 * a[i].first.first, second + 2 * a[i].first.second) <=                 inf) {           add(second, 2 * a[i].first.second);           add(first, 2 * a[i].first.first);           ans[a[i].second] = 1;         } else if (ans[a[i].second] == 1 &&                    mul(first - 2 * a[i].first.first,                        second - 2 * a[i].first.second) <= inf) {           sub(first, 2 * a[i].first.first);           sub(second, 2 * a[i].first.second);           ans[a[i].second] = -1;         }       }     }   }   int main() {     enter();     progress();     for (int i = 0; i < n; i++) {       write(ans[i]);       putchar(   );     }   }   