#include <bits/stdc++.h>
using namespace std;
void ac(long long x) {
  if (x)
    puts("YES");
  else
    puts("NO");
}
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long ppow(long long a, long long b, long long mod) {
  a %= mod;
  long long ans = 1 % mod;
  while (b) {
    if (b & 1) ans = (long long)ans * a % mod;
    a = (long long)a * a % mod;
    b >>= 1;
  }
  return ans;
}
long long readdd() {
  long long x = 0, f = 1;
  char c = getchar();
  while (!isdigit(c) && c != '-') c = getchar();
  if (c == '-') f = -1, c = getchar();
  while (isdigit(c)) x = x * 10 + c - '0', c = getchar();
  return f * x;
}
void printtt(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) printtt(x / 10);
  putchar(x % 10 + '0');
}
bool addd(long long a, long long b) { return a > b; }
long long lowbit(long long x) { return x & -x; }
const long long dx[4] = {0, 0, 1, -1};
const long long dy[4] = {1, -1, 0, 0};
const long long BN = 2e6 + 5;
struct BIT {
  long long c[BN];
  void init() { memset(c, 0, sizeof c); }
  long long lowbit(long long i) { return i & -i; }
  void add(long long i, long long t) {
    while (i < BN) c[i] += t, i += lowbit(i);
  }
  long long ask(long long i) {
    long long ans = 0;
    while (i) ans += c[i], i -= lowbit(i);
    return ans;
  }
};
bool Isprime(long long x) {
  for (long long i = 2; i * i <= x; i++)
    if (x % i == 0) return 0;
  return 1;
}
bool isdigit(char c) { return c >= '0' && c <= '9'; }
const long long FN = 2e6 + 5;
long long pre[FN];
long long ffind(long long x) {
  return pre[x] == x ? x : pre[x] = ffind(pre[x]);
}
const long long SGTN = 2e6 + 5;
struct SGT {
  long long a[SGTN << 2];
  long long la[SGTN << 2];
  void pd(long long x) {
    if (la[x]) {
      a[x * 2] += la[x], a[x * 2 + 1] += la[x];
      la[x * 2] += la[x], la[x * 2 + 1] += la[x];
      la[x] = 0;
    }
  }
  void pp(long long x) {
    if (!a[x * 2] && !a[x * 2 + 1]) {
      a[x] = 1e18;
    } else if (!a[x * 2]) {
      a[x] = a[x * 2 + 1];
    } else {
      a[x] = min(a[x * 2], a[x * 2 + 1]);
    }
  }
  void add(long long st, long long ed, long long val, long long l, long long r,
           long long x) {
    if (st <= l && ed >= r) {
      a[x] += val;
      la[x] += val;
      return;
    }
    pd(x);
    long long mid = (l + r) / 2;
    if (st <= mid) add(st, ed, val, l, mid, x * 2);
    if (ed > mid) add(st, ed, val, mid + 1, r, x * 2 + 1);
    pp(x);
  }
};
void init() { ; }
const double Pi = acos(-1);
const double eps = 1e-7;
const long long mod = 998244353;
const long long modd = mod - 1;
const long long maxm = 3e5 + 5;
long long a[maxm];
long long b[maxm];
long long c[maxm];
long long sz[maxm];
char t[maxm];
vector<long long> g[maxm];
vector<long long> gg[maxm];
long long n, m, q, k;
vector<long long> res;
vector<long long> temp;
pair<long long, long long> p[maxm];
void solve() {
  n = readdd();
  if (n <= 5) {
    printtt(-1);
    puts("");
    ;
  } else {
    cout << "1 2" << endl;
    cout << "1 3" << endl;
    cout << "1 4" << endl;
    for (long long i = 5; i <= n; i++) {
      cout << i << ' ' << 4 << endl;
    }
  }
  cout << endl;
  for (long long i = 2; i <= n; i++) {
    cout << i << ' ' << 1 << endl;
  }
}
signed main() {
  init();
  solve();
  return 0;
}
