/** author: shobonvip created: 2026.09.19 14:13:35 **/ #include using namespace std; //* ATCODER #include using namespace atcoder; typedef modint998244353 mint; //*/ /* BOOST MULTIPRECISION #include using namespace boost::multiprecision; //*/ typedef long long ll; #define rep(i, s, n) for (int i = (int)(s); i < (int)(n); i++) #define rrep(i, s, n) for (int i = (int)(n)-1; i >= (int)(s); i--) #define all(v) v.begin(), v.end() template bool chmin(T &a, const T &b) { if (a <= b) return false; a = b; return true; } template bool chmax(T &a, const T &b) { if (a >= b) return false; a = b; return true; } template T max(vector &a){ assert(!a.empty()); T ret = a[0]; for (int i=0; i<(int)a.size(); i++) chmax(ret, a[i]); return ret; } template T min(vector &a){ assert(!a.empty()); T ret = a[0]; for (int i=0; i<(int)a.size(); i++) chmin(ret, a[i]); return ret; } template T sum(vector &a){ T ret = 0; for (int i=0; i<(int)a.size(); i++) ret += a[i]; return ret; } vector,pair>> solve(int n) { if (n == 4) { return vector,pair>>{ {{0,0},{0,1}}, {{0,1},{0,2}}, {{0,2},{0,3}}, {{0,3},{1,3}}, {{1,3},{2,3}}, {{2,3},{3,3}}, {{0,2},{1,2}}, {{0,1},{1,1}}, {{1,1},{1,0}}, {{1,0},{2,0}}, {{2,0},{3,0}}, {{3,0},{3,1}}, {{3,1},{3,2}}, {{3,2},{2,2}}, {{2,2},{2,1}}, }; } else if (n == 5) { return vector,pair>>{ {{0,0},{0,1}}, {{0,1},{0,2}}, {{0,2},{0,3}}, {{0,3},{0,4}}, {{0,4},{1,4}}, {{1,4},{2,4}}, {{2,4},{3,4}}, {{3,4},{4,4}}, {{0,3},{1,3}}, {{1,3},{2,3}}, {{1,3},{1,2}}, {{1,2},{2,2}}, {{2,2},{2,1}}, {{2,1},{3,1}}, {{3,1},{4,1}}, {{4,2},{3,2}}, {{4,2},{4,3}}, {{4,3},{3,3}}, {{3,3},{3,4}}, {{1,0},{1,1}}, {{1,0},{2,0}}, {{2,0},{3,0}}, {{3,0},{4,0}}, {{4,0},{4,1}}, }; } else { if (n%2 == 0) { auto base = solve(4); for (auto &[a,b]: base) { a.first += n-4; a.second += n-4; b.first += n-4; b.second += n-4; } auto add=[&](int a,int b,int c,int d){ base.emplace_back( pair(pair(a,b),pair(c,d)) ); }; int g = n-6; while (g>=0) { add(g,n-2,g,n-1); add(g,n-1,g+1,n-1); add(g+1,n-1,g+1,n-2); add(g+1,n-2,g+2,n-2); add(n-2,g,n-1,g); add(n-1,g,n-1,g+1); add(n-1,g+1,n-2,g+1); add(n-2,g+1,n-2,g+2); add(g,g,g,g+1); add(g,g+1,g,g+2); rep(y,g+2,n-2) { add(g,y,g+1,y); if(y%2==(g+2)%2) add(g+1,y,g+1,y+1); else add(g,y,g,y+1); } rep(y,g+1,n-2) { add(y,g,y,g+1); if(y%2==(g+1)%2) add(y,g,y+1,g); else add(y,g+1,y+1,g+1); } g-=2; } return base; }else { auto base = solve(5); for (auto &[a,b]: base) { a.first += n-5; a.second += n-5; b.first += n-5; b.second += n-5; } auto add=[&](int a,int b,int c,int d){ base.emplace_back( pair(pair(a,b),pair(c,d)) ); }; int g = n-7; while (g>=0) { add(g+1,n-1,g+2,n-1); add(n-1,g+1,n-1,g+2); add(g,g,g,g+1); add(g,g+1,g,g+2); rep(y,g+2,n) { add(g,y,g+1,y); if(y==n-1)break; if(y%2==(g+2)%2) add(g+1,y,g+1,y+1); else add(g,y,g,y+1); } rep(y,g+1,n) { add(y,g,y,g+1); if(y==n-1)break; if(y%2==(g+1)%2) add(y,g,y+1,g); else add(y,g+1,y+1,g+1); } g-=2; } return base; } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); // n=4,5 の場合にbasecaseがある // n -> n-2 が構築可能. int n; cin >> n; if (n <= 3) { cout << -1 << '\n'; return 0; } vector,pair>> ans = solve(n); //assert((int)ans.size() == n * n - 1); for (auto [a,b]: ans) { cout << a.first * n + a.second + 1 << ' ' << b.first * n + b.second + 1 << '\n'; } //cout << (int) ans.size() << endl; }