func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 0x3fffffff;   const long long _INF = 0x7ffffffffffffffll;   const double EPS = 1e-9;   const double PI = acos(-1.0);   template <class T, class INT>   inline T pow(T x, INT y) {     T res(1);     for (T tt(x); y; y /= 2) {       if (y & 1) res *= tt;       tt *= tt;     }     return res;   }   template <class T, class INT>   inline T pow(T x, INT y, T p) {     T res(1);     for (T tt(x); y; y /= 2) {       if (y & 1) res = res * tt % p;       tt = tt * tt % p;     }     return res;   }   int toInt(string s) {     int x = 0;     istringstream sin(s);     sin >> x;     return x;   }   template <class T>   inline string toString(T x) {     ostringstream sout;     sout << x;     return sout.str();   }   template <class INT>   inline INT gcd(INT x, INT y) {     return y ? gcd(y, x % y) : x;   }   template <class INT>   inline int calc_bits(INT x) {     return x ? (x & 1) + calc_bits(x >> 1) : 0;   }   const int MAXD = 80000 + 10;   const int MAXM = 200 + 1;   int tmp, sumx, sumy, cnt, n;   vector<pair<int, int> > a;   bool check[MAXD];   struct Graph {     int head[MAXM], next[MAXD], vis[MAXD], tot;     inline void add(int u, int v) {       next[++tot] = head[u];       vis[head[u] = tot] = v;     }   } x, y;   inline int abs(pair<int, int> a) {     return ((a.first) * (a.first)) + ((a.second) * (a.second));   }   inline bool cmp(pair<int, int> a, pair<int, int> b) {     return atan2(a.second, a.first) < atan2(b.second, b.first) - EPS;   }   inline bool _cmp(pair<int, int> a, pair<int, int> b) { return abs(a) < abs(b); }   int main(int argc, char* argv[]) {     for (int i = 0; i < (MAXM); ++i)       for (int j = 0; j < (MAXM); ++j) {         tmp = abs(pair<int, int>(i, j));         if (!check[tmp]) check[tmp] = true, a.push_back(pair<int, int>(i, j));       }     cin >> n;     sort((a).begin(), (a).end(), _cmp);     for (int i = 0; i < (n + 1); ++i) sumx += a[i].first, sumy += a[i].second;     if (sumx + sumy & 1) {       sumx += a[n + 1].first, sumy += a[n + 1].second;       for (int i = (n); i > (0); --i)         if (!(sumx - a[i].first & 1) && !(sumy - a[i].second & 1)) {           swap(a[i], a[n + 1]);           break;         }     } else if (sumx & 1)       for (int i = (1); i < (n + 1); ++i)         if (a[i].first + a[i].second & 1) {           swap(a[i].first, a[i].second);           break;         }     for (int i = (1); i < (n + 1); ++i)       x.add(a[i].first, i), y.add(a[i].second, i);     for (int i = (200); i > (0); --i)       for (int j = x.head[i]; j; j = x.next[j])         if (cnt > 0)           a[x.vis[j]].first = -a[x.vis[j]].first, cnt -= i;         else           cnt += i;     for (int i = (200); i > (0); --i)       for (int j = y.head[i]; j; j = y.next[j])         if (cnt > 0)           a[y.vis[j]].second = -a[y.vis[j]].second, cnt -= i;         else           cnt += i;     sort(a.begin() + 1, a.begin() + n + 1, cmp);     sumx = sumy = 0;     cout <<  YES  << endl;     for (int i = (1); i < (n + 1); ++i) {       cout << sumx <<     << sumy << endl;       sumx += a[i].first, sumy += a[i].second;     }   }   