#include <bits/stdc++.h>
using namespace std;
int K = 2500;
int cnt = 0;
int mox[] = {2, 2, 1, 1, -1, -1, -2, -2};
int moy[] = {1, -1, 2, -2, 2, -2, 1, -1};
int used[5003][5003];
bool counted[5003][5003];
vector<pair<int, int> > ans;
void add(int x, int y) {
  for (int i = 0; i < 8; i++) {
    int _x = x + mox[i], _y = y + moy[i];
    if (counted[_x][_y] == 1) continue;
    used[_x][_y]++;
    if (used[_x][_y] == 4) {
      ++cnt;
      counted[_x][_y] = 1;
      add(_x, _y);
    }
  }
}
void cek() {
  for (auto i : ans) {
    int x = i.first, y = i.second;
    printf("%d %d\n", x, y);
    if (counted[x][y]) continue;
    ++cnt;
    counted[x][y] = 1;
    add(x, y);
  }
}
int main() {
  int n;
  scanf("%d", &n);
  memset(used, 0, sizeof used);
  memset(counted, 0, sizeof counted);
  cnt = 0;
  ans.clear();
  int hit = n;
  int quat = n * 6 / 22;
  if (n >= 30 && n <= 32) quat--;
  if (n >= 19 && n <= 21) quat--;
  if (n >= 39 && n <= 42) quat--;
  if (n == 44) quat--;
  for (int i = K + 1; i <= K + quat; i++) {
    ans.push_back({K + 1, i});
    ans.push_back({K + 2, i});
    hit -= 2;
  }
  if (quat == 1) quat++;
  int it = 1;
  while (hit >= 2) {
    if (it % 6 == 2) ++it;
    ans.push_back({K + 2 + it, K + 1});
    ans.push_back({K + 2 + it, K + quat});
    hit -= 2;
    ++it;
  }
  if (hit) ans.push_back({K + 2 + it, K + 1});
  cek();
  if (cnt < n * n / 10) printf("%d %d %d\n", n, cnt, n * n / 10);
}
