using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("3");
//3
//1 1 1 2
//1 3 2 2
//3 1 2 1
}
else if (InputPattern == "Input2") {
WillReturn.Add("2");
//1
//1 2 2 1
}
else if (InputPattern == "Input3") {
WillReturn.Add("4");
//5
//1 1 1 2
//2 2 2 1
//3 1 4 1
//1 4 1 3
//3 2 2 3
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static long[] GetSplitArr(string pStr)
{
return (pStr == "" ? new string[0] : pStr.Split(' ')).Select(pX => long.Parse(pX)).ToArray();
}
static void Main()
{
List<string> InputList = GetInputList();
long N = long.Parse(InputList[0]);
// 房の有無[X,Y]な2次元配列
bool[,] BoolArr = new bool[N + 1 + 1, N + 1 + 1];
long RetuCnt = N;
for (long LoopY = 1; LoopY <= N; LoopY++) {
for (long LoopX = 1; LoopX <= RetuCnt; LoopX++) {
BoolArr[LoopX, LoopY] = true;
}
RetuCnt--;
}
var Answerist = new List<string>();
for (long LoopY = 1; LoopY <= N; LoopY++) {
for (long LoopX = 1; LoopX <= N; LoopX++) {
if (BoolArr[LoopX, LoopY] && BoolArr[LoopX + 1, LoopY]) {
BoolArr[LoopX, LoopY] = false;
BoolArr[LoopX + 1, LoopY] = false;
Answerist.Add(string.Format("{0} {1} {2} {3}", LoopX, LoopY, LoopX + 1, LoopY));
}
if (BoolArr[LoopX, LoopY] && BoolArr[LoopX - 1, LoopY + 1]) {
BoolArr[LoopX, LoopY] = false;
BoolArr[LoopX - 1, LoopY + 1] = false;
Answerist.Add(string.Format("{0} {1} {2} {3}", LoopX, LoopY, LoopX - 1, LoopY + 1));
}
if (BoolArr[LoopX, LoopY] && BoolArr[LoopX, LoopY + 1]) {
BoolArr[LoopX, LoopY] = false;
BoolArr[LoopX, LoopY + 1] = false;
Answerist.Add(string.Format("{0} {1} {2} {3}", LoopX, LoopY, LoopX, LoopY + 1));
}
}
}
Console.WriteLine(Answerist.Count);
Answerist.ForEach(pX => Console.WriteLine(pX));
}
}