P17039 [NWERC 2021] 切割边沿 / Cutting Edge

题目背景

译自 [Northwestern Europe Regional Contest (NWERC) 2021](http://2021.nwerc.eu) Problem C。 原题许可协议为 CC BY-SA。

题目描述

近些年来,各类 $3$D 物体的自动化制造在世界各地的爱好者中越来越流行。你的朋友 Lewis 完全投入了这股潮流:他的车库里现在摆满了各种 $3$D 打印机和其他昂贵设备。 他不断扩张的收藏中最新加入的是一台自动切割机。这台机器的工作方式是:从一个初始形状为长方体的工件上切掉材料。每一次切割都会沿一个平面切过工件,并只保留该平面一侧的材料。这意味着最终工件的形状一定是一个凸多面体。 Lewis 这台机器的编程接口相当特别。用户并不直接指定切割平面,而是输入一组点,机器随后计算切割平面,使得所有这些点都属于最终形状,并且该形状的体积最小。形式化地说,它计算输入点的凸包。虽然这种设定在许多应用中很方便,但它也有些限制,因为机器只允许点的坐标使用 $1\text{ mm}$ 的整数倍。 Lewis 想用这台机器为一款桌面游戏切割游戏棋子。他并不特别关心棋子的形状,但要求它们有指定的重量。工件密度恒定,因此他只需要保证最终形状有指定的体积即可。不过,由于机器的输入要求,这仍然很有挑战。请帮助 Lewis 为他的切割机找到一个合法输入。

输入格式

输入包含: - 一行四个整数 $a,b,c$ 和 $v$($1 \leq a,b,c \leq 10^6$,$1 \leq v \leq 6\cdot a\cdot b\cdot c$),其中工件尺寸为 $a\text{ mm}\times b\text{ mm}\times c\text{ mm}$,最终形状的体积必须为 $\frac{v}{6}\text{ mm}^3$。

输出格式

输出一个整数 $n$($4 \leq n \leq 100$),随后输出 $n$ 个点来指定最终形状。每个点由三个整数 $x,y,z$ 给出($0 \leq x \leq a$,$0 \leq y \leq b$,$0 \leq z \leq c$)。机器会把这 $n$ 个点的凸包作为最终形状,其体积必须恰好为 $\frac{v}{6}\text{ mm}^3$。 如果存在多个合法解,你可以输出任意一个。保证一定存在解。注意,允许输出重复的点。

说明/提示

【数据规模与约定】 对于所有数据,$1 \leq a,b,c \leq 10^6$,$1 \leq v \leq 6\cdot a\cdot b\cdot c$;输出点数满足 $4 \leq n \leq 100$,每个点满足 $0 \leq x \leq a$、$0 \leq y \leq b$、$0 \leq z \leq c$。保证存在解。