#include <bits/stdc++.h>
#pragma comment(linker, "/stack:640000000")
using namespace std;
const double EPS = 1e-9;
const int INF = 0x7f7f7f7f;
const double PI = acos(-1.0);
template <class T>
inline T gcd(T a, T b) {
  return (b) == 0 ? (a) : gcd((b), ((a) % (b)));
}
template <class T>
inline T lcm(T a, T b) {
  return ((a) / gcd((a), (b)) * (b));
}
template <typename T>
string NumberToString(T Number) {
  ostringstream second;
  second << Number;
  return second.str();
}
struct debugger {
  template <typename T>
  debugger& operator,(const T& v) {
    cerr << v << " ";
    return *this;
  }
} dbg;
int t, n, m;
string s;
void printCorrect() {
  int cur = 1;
  while (cur < n) {
    printf("%d %d\n", cur, cur + 1);
    cur++;
  }
}
void printDefault() {
  puts("1 2");
  puts("1 3");
  puts("1 5");
  puts("2 4");
  puts("2 6");
}
void printWrong() {
  if (n <= 5) {
    puts("-1");
    return;
  }
  for (int i = 2; i <= n / 2 + 1; i++) {
    printf("1 %d\n", i);
  }
  for (int i = n / 2 + 2; i <= n; i++) {
    printf("2 %d\n", i);
  }
  return;
}
int main() {
  while (~scanf("%d", &n)) {
    printWrong();
    printCorrect();
  }
  return 0;
}
