#P17003. [SGU480] Gena's Soul Cakes

[SGU480] Gena's Soul Cakes

题目描述

定义一种三维图形 corner:它由四个大小相同的立方体组成,其中一个立方体分别与另外三个立方体共面相邻,并且四个立方体恰好有一个公共点,这个公共点是每个立方体的一个顶点。

每个 corner 有两个属性:

  • 颜色;
  • 大小。若组成它的立方体边长为 2j2^j,则称其大小指数为 jj

现在有 cc 种颜色。对于每种颜色 ii 和每个大小指数 jj,给出可用的 corner 数量 ai,ja_{i,j}

你需要用这些小 corner 拼成一个大小为 2k2^k 的大 corner,并使得所使用的不同颜色数量最少

一个大小为 2j2^j 的 corner 可以恰好分解成 88 个大小为 2j12^{j-1} 的 corner,因此不同大小的零件可以递归组合。

输入格式

第一行两个整数 c,kc,k,满足 1c,k10001\le c,k\le1000

接下来 cc 行,每行 kk 个整数。第 ii 行第 j+1j+1 个整数为 ai,ja_{i,j},表示颜色 ii、大小指数 jj 的 corner 数量,其中:

0ai,j1000,0j<k0\le a_{i,j}\le1000,\quad 0\le j<k

目标大 corner 的大小为 2k2^k

输出格式

若无法构造,输出:

NO SOLUTION

否则第一行输出整数 nn,表示实际使用了多少种“颜色 + 大小指数”的零件类型。

接下来 nn 行,每行三个整数 a,b,ca,b,c

  • aa:颜色编号;
  • bb:大小指数;
  • cc:使用这种零件的数量。

同一种类型在输出中至多出现一次。必须满足输入给出的数量限制,并且构造使用的不同颜色数最少。若有多个最优方案,输出任意一个。

样例 1

1 1
8
1
1 0 8

样例 2

2 2
1 7
7 0
3
1 1 7
1 0 1
2 0 7