#include <bits/stdc++.h>
using namespace std;
using li = long long;
using ld = long double;
void solve(bool);
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout << fixed << setprecision(20);
  for (int i = 0; i < 1; ++i) {
    solve(true);
  }
  return 0;
}
const int inf = (int)1e9 + 5;
const vector<pair<int, int>> moves = {{1, 2},   {2, 1},   {2, -1}, {1, -2},
                                      {-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}};
int n, m;
map<pair<int, int>, int> pos;
vector<pair<int, int>> ans;
void upd(int x, int y) {
  for (auto mv : moves) {
    ++pos[{x + mv.first, y + mv.second}];
  }
}
void check() {
  int cntx = 0;
  pos.clear();
  for (auto pr : ans) {
    int i, j;
    tie(i, j) = pr;
    ++cntx;
    pos[{i, j}] = -inf;
    upd(i, j);
  }
  int cnty = 0;
  while (1) {
    int fl = 0;
    for (auto it : pos) {
      if (it.second >= 4) {
        fl = 1;
        pos[it.first] = -inf;
        ++cnty;
        upd(it.first.first, it.first.second);
      }
    }
    if (!fl) {
      break;
    }
  }
  if (!(cntx + cnty >= (cntx * cntx / 10))) {
    cout << n << " " << cntx << endl;
    cout << cntx + cnty << " " << (cntx * cntx / 10) << endl;
  }
  assert(n == cntx);
  assert(cntx + cnty >= (cntx * cntx / 10));
}
void solve(bool __attribute__((unused)) read) {
  if (read) {
    cin >> n;
  } else {
    n = rand() % 100 + 1;
  }
  ans.clear();
  int l = n / 2 + n % 2;
  for (int i = 0; i < l; ++i) {
    if (read) {
      cout << 0 << " " << i - l / 2 << "\n";
    }
    ans.push_back({0, i - l / 2});
  }
  for (int i = 0; i < l; ++i) {
    if (i == l / 2) continue;
    if (read) {
      cout << i - l / 2 << " " << 0 << "\n";
    }
    ans.push_back({i - l / 2, 0});
  }
  int i = l;
  while ((int)ans.size() < n) {
    if (read) {
      cout << i - l / 2 << " " << 0 << "\n";
    }
    ans.push_back({i - l / 2, 0});
    ++i;
  }
}
