#include <bits/stdc++.h>
using namespace std;
const int MAXN=1030;
int n;
int row[MAXN]={0}, column[MAXN]={0}, ldiagonal[2*MAXN]={0}, rdiagonal[2*MAXN]={0};
int order[MAXN][MAXN];
int k=1;
void add(int x, int y)
{
order[x][y]=k;
k=k+1;
row[x]=row[x]+1;
column[y]=column[y]+1;
ldiagonal[x+y]=ldiagonal[x+y]+1;
rdiagonal[x-y+n]=rdiagonal[x-y+n]+1;
return;
}
void build3(int x, int y)
{
if (y==1)
{
add(1, 2);
add(2, 0);
add(1, 1);
add(0, 0);
add(2, 2);
add(2, 1);
add(0, 1);
add(0, 2);
add(1, 0);
return;
}
if (x==0)
build3(x, y-2);
if (y-x==1)
{
y=y-1;
add(x+1, y+2);
add(x+0, y+1);
add(x+2, y+1);
add(x+1, y+1);
add(x+0, y+2);
add(x+2, y+0);
add(x+1, y+0);
add(x+2, y+2);
return;
}
if ((row[x]+column[y]+ldiagonal[x+y]+rdiagonal[x-y+n])%2==0)
{
add(x, y);
add(x, y+1);
if ((row[y]+column[x]+ldiagonal[y+x]+rdiagonal[y-x+n])%2==0)
{
add(y, x);
add(y+1, x);
}
else
{
add(y+1, x);
add(y, x);
}
}
else
{
add(x, y+1);
add(x, y);
if ((row[y]+column[x]+ldiagonal[y+x]+rdiagonal[y-x+n])%2==0)
{
add(y, x);
add(y+1, x);
}
else
{
add(y+1, x);
add(y, x);
}
}
build3(x+1, y);
return;
}
void build4(int x, int y)
{
if (y==2)
{
add(0, 1);
add(1, 3);
add(0, 2);
add(1, 0);
add(1, 1);
add(2, 3);
add(0, 3);
add(2, 0);
add(2, 1);
add(2, 2);
add(3, 0);
add(3, 2);
add(3, 1);
add(3, 3);
return;
}
if (x==0)
build4(x, y-2);
if (y-x==1)
{
y=y-1;
add(x+0, y+2);
add(x+0, y+1);
add(x+1, y+2);
add(x+1, y+0);
add(x+2, y+0);
add(x+1, y+1);
add(x+2, y+1);
add(x+2, y+2);
return;
}
//cout << "x y " << x+1 << ' ' << y+1 << '\n';
//cout << row[x]+column[y]+ldiagonal[x+y]+rdiagonal[x-y+n] << '\n';
//cout << row[x]+column[y+1]+ldiagonal[x+y+1]+rdiagonal[x-y-1+n] << '\n';
if ((row[x]+column[y]+ldiagonal[x+y]+rdiagonal[x-y+n])%2==0)
{
add(x, y);
add(x, y+1);
//cout << "x y " << y+1 << ' ' << x+1 << '\n';
//cout << row[y]+column[x]+ldiagonal[x+y]+rdiagonal[y-x+n] << '\n';
//cout << row[y]+column[x+1]+ldiagonal[x+y+1]+rdiagonal[y-x-1+n] << '\n';
if ((row[y+1]+column[x]+ldiagonal[y+1+x]+rdiagonal[y+1-x+n])%2==0)
{
add(y+1, x);
add(y, x);
}
else
{
add(y, x);
add(y+1, x);
}
}
else
{
add(x, y+1);
add(x, y);
//cout << "x y " << y+1 << ' ' << x+1 << '\n';
//cout << row[y]+column[x]+ldiagonal[x+y]+rdiagonal[y-x+n] << '\n';
//cout << row[y]+column[x+1]+ldiagonal[x+y+1]+rdiagonal[y-x-1+n] << '\n';
if ((row[y+1]+column[x]+ldiagonal[y+1+x]+rdiagonal[y+1-x+n])%2==0)
{
add(y+1, x);
add(y, x);
}
else
{
add(y, x);
add(y+1, x);
}
}
build4(x+1, y);
return;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
order[i][j]=0;
if (n<=2)
{
cout << 1 << '\n';
cout << 1 << ' ' << 1 << '\n';
}
else if (n%2==1)
{
build3(0, n-2);
pair<int, int> answer[n*n];
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
answer[order[i][j]-1]={i+1, j+1};
cout << n*n << '\n';
for (int i=0; i<n*n; i++)
cout << answer[i].first << ' ' << answer[i].second << '\n';
}
else
{
build4(0, n-2);
pair<int, int> answer[n*n-2];
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
if (order[i][j]!=0) {
answer[order[i][j]-1]={i+1, j+1};
ce
}
cout << n*n-2 << '\n';
for (int i=0; i<n*n-2; i++)
cout << answer[i].first << ' ' << answer[i].second << '\n';
}
return 0;
}