#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
void D() { cerr << endl; }
string to_string(string s) { return s; }
string to_string(const char* s) { return (string)s; }
string to_string(char s) {
  string res = "";
  res += s;
  return res;
}
string to_string(bool b) { return (b ? "true" : "false"); }
template <typename T, typename S>
string to_string(pair<T, S> p) {
  return "(" + to_string(p.first) + "," + to_string(p.second) + ")";
}
template <typename T>
string to_string(T v) {
  bool first = true;
  string res = "";
  for (auto i = v.begin(); i != v.end(); ++i) {
    res += to_string(*i);
    res += " \n"[i == v.end() - 1];
  }
  return res;
}
template <typename T, typename S>
string to_string(map<T, S> p) {
  bool first = true;
  string res = "";
  for (const auto& x : p) {
    if (!first) {
      res += ",";
    }
    first = false;
    res += ("(" + to_string(x.first) + "," + to_string(x.second) + ")");
  }
  return res;
}
template <typename T, typename... S>
void D(T H, S... X) {
  cerr << " " << to_string(H);
  D(X...);
}
template <typename T, typename S>
bool amin(T& a, const S& b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T, typename S>
bool amax(T& a, const S& b) {
  return a < b ? a = b, 1 : 0;
}
ll inf = 1e18, mod = 1e9 + 7, mx = 200001;
void solve() {
  ll n;
  cin >> n;
  if (n < 6) {
    cout << -1 << "\n";
    for (ll i = 2; i <= n; i += (1)) {
      cout << 1 << " " << i << endl;
    }
  } else {
    cout << 1 << " " << 2 << endl;
    cout << 1 << " " << 3 << endl;
    cout << 1 << " " << 4 << endl;
    for (ll i = 5; i <= n; i += (1)) {
      cout << 3 << " " << i << endl;
    }
    for (ll i = 2; i <= n; i += (1)) {
      cout << 1 << " " << i << endl;
    }
  }
}
int main() {
  ll T = 1;
  while (T--) solve();
  return 0;
}
