#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > v, a;
vector<pair<double, int> > ans;
int n, sum, del, sx, sy, x, y, Nx, Ny;
set<int> u;
int cmp(pair<int, int> a, pair<int, int> b) {
  return ((a.first) * (a.first)) + ((a.second) * (a.second)) <
         ((b.first) * (b.first)) + ((b.second) * (b.second));
}
int main() {
  v.clear();
  u.clear();
  for (int i = 0; i <= 200; i++)
    for (int j = i; j <= 200; j++)
      if (i + j)
        if (!u.count(((i) * (i)) + ((j) * (j))))
          v.push_back(make_pair(i, j)), u.insert(((i) * (i)) + ((j) * (j)));
  sort(v.begin(), v.end(), cmp);
  cin >> n;
  sum = 0;
  for (int i = 0; i < n; i++) sum += (v[i].first + v[i].second) & 1;
  a.clear();
  del = n;
  if (sum & 1) {
    sum += (v[n].first + v[n].second) & 1;
    for (int i = n - 1; i >= 0; i--)
      if (!((sum - ((v[i].first + v[i].second) & 1)) & 1)) {
        del = i;
        break;
      }
  }
  for (int i = 0; i <= n; i++)
    if (del != i) a.push_back(v[i]);
  sx = sy = 0;
  for (int i = n - 1; i >= 0; i--) {
    x = a[i].first, y = a[i].second;
    for (int s = 0; s < 8; s++) {
      Nx = x, Ny = y;
      if (s & 1) swap(Nx, Ny);
      if (s & 2) Nx *= -1;
      if (s & 4) Ny *= -1;
      if (((sx + a[i].first) * (sx + a[i].first)) +
              ((sy + a[i].second) * (sy + a[i].second)) >
          ((sx + Nx) * (sx + Nx)) + ((sy + Ny) * (sy + Ny)))
        a[i] = make_pair(Nx, Ny);
    }
    sx += a[i].first, sy += a[i].second;
  }
  for (int i = 0; i < n; i++)
    ans.push_back(make_pair(atan2(a[i].second, a[i].first), i));
  sort(ans.begin(), ans.end());
  cout << "YES" << endl;
  sx = 0, sy = 0;
  for (int i = 0; i < n; i++) {
    cout << sx << " " << sy << endl;
    int id = ans[i].second;
    sx += a[id].first, sy += a[id].second;
  }
  return 0;
}
