草方块与牛排
题号:NC238812
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

牛牛最近迷上了一款名为《牛的世界》的沙盒游戏。
在这款沙盒游戏里,有一个大小为 的初始平面,第 i 行第 j 列的位置编号为 。游戏者可以在其上放置一些方块,每一个方块占 的面积。由于这是牛世界新开发的沙盒游戏,难免有亿点简陋,所以游戏者可以放置的方块只有草方块和骨头。
为了给这个游戏增加一点趣味,牛牛决定增加一种名为“牛排”的方块组。
为了符合实际情况,“牛排”这个方块组的放置有一定的限制。

1. “牛排”方块组由四块骨头方块构成,为及其旋转、翻转可以得到的形状;
2. “牛排”方块组的四块骨头方块必须放置在同一高度上,且每一块骨头方块下恰好有一块草方块;
牛妹受邀为牛牛的方块组进行一些测试,于是她把整块 的初始平面的每一个位置上上都放置了一块草方块,但由于某些原因,她在左上角放置的 的草方块消失了
牛牛看到牛妹铺好的地图,决定用他新发明的“牛排”方块组将这 块草方块全部铺满,但他还要完善他的其他方块组,于是这个问题就交给了你。你需要告诉他一种铺排方式,或者告诉他这是不可能实现的。

输入描述:

输入共一行,为一个整数  ,含义见题面。

输出描述:

输出可能有一行或者若干行。
如果不存在合法的铺排方式,则输出 -1
否则第一行输出一个整数 m 表示要铺的“牛排”方块组的个数。
接下来 m 行,每行输出 4 个整数,表示一个“牛排”方块组中四个方块所在的位置的编号,其中第 i 行第 j 列的位置编号为
示例1

输入

复制
3

输出

复制
-1

说明

白色的格子表示能放置“牛排”方块组的位置,一共有 5 块,但是一个“牛排”方块组占 4 个方块,一定不可能全部铺满。
示例2

输入

复制
6

输出

复制
8
3 16 9 15
32 33 27 31
22 21 20 26
4 5 10 6
11 18 12 24
28 34 36 35
17 30 23 29
13 14 19 25

说明

输出构造的方案如图: