#P17039. [NWERC 2021] Cutting Edge

[NWERC 2021] Cutting Edge

背景

译自 Northwestern Europe Regional Contest (NWERC) 2021 Problem C。

原题许可协议为 CC BY-SA。

题目描述

近些年来,各类 33D 物体的自动化制造在世界各地的爱好者中越来越流行。你的朋友 Lewis 完全投入了这股潮流:他的车库里现在摆满了各种 33D 打印机和其他昂贵设备。

他不断扩张的收藏中最新加入的是一台自动切割机。这台机器的工作方式是:从一个初始形状为长方体的工件上切掉材料。每一次切割都会沿一个平面切过工件,并只保留该平面一侧的材料。这意味着最终工件的形状一定是一个凸多面体。

Lewis 这台机器的编程接口相当特别。用户并不直接指定切割平面,而是输入一组点,机器随后计算切割平面,使得所有这些点都属于最终形状,并且该形状的体积最小。形式化地说,它计算输入点的凸包。虽然这种设定在许多应用中很方便,但它也有些限制,因为机器只允许点的坐标使用 1 mm1\text{ mm} 的整数倍。

Lewis 想用这台机器为一款桌面游戏切割游戏棋子。他并不特别关心棋子的形状,但要求它们有指定的重量。工件密度恒定,因此他只需要保证最终形状有指定的体积即可。不过,由于机器的输入要求,这仍然很有挑战。请帮助 Lewis 为他的切割机找到一个合法输入。

输入格式

输入包含:

  • 一行四个整数 a,b,ca,b,cvv1a,b,c1061 \leq a,b,c \leq 10^61v6abc1 \leq v \leq 6\cdot a\cdot b\cdot c),其中工件尺寸为 a mm×b mm×c mma\text{ mm}\times b\text{ mm}\times c\text{ mm},最终形状的体积必须为 v6 mm3\frac{v}{6}\text{ mm}^3

输出格式

输出一个整数 nn4n1004 \leq n \leq 100),随后输出 nn 个点来指定最终形状。每个点由三个整数 x,y,zx,y,z 给出(0xa0 \leq x \leq a0yb0 \leq y \leq b0zc0 \leq z \leq c)。机器会把这 nn 个点的凸包作为最终形状,其体积必须恰好为 v6 mm3\frac{v}{6}\text{ mm}^3

如果存在多个合法解,你可以输出任意一个。保证一定存在解。注意,允许输出重复的点。

1 1 1 1
4
0 0 0
1 0 0
0 1 0
0 0 1
3 1 2 7
5
0 0 1
2 0 0
3 0 0
3 0 2
2 1 1
2 2 2 25
9
0 0 2
2 0 0
0 2 0
1 0 2
2 1 2
2 0 1
0 2 2
1 2 2
2 1 2

提示

【数据规模与约定】

对于所有数据,1a,b,c1061 \leq a,b,c \leq 10^61v6abc1 \leq v \leq 6\cdot a\cdot b\cdot c;输出点数满足 4n1004 \leq n \leq 100,每个点满足 0xa0 \leq x \leq a0yb0 \leq y \leq b0zc0 \leq z \leq c。保证存在解。