#CF1521E. 美丽矩阵

美丽矩阵

美丽矩阵

  • 时间限制:2 秒
  • 内存限制:256 MiB

题目描述

给定 kk 种正整数。数字 ii 恰好有 aia_i 个,所有数字的总数为 mm。

一个 n×nn\times n 的矩阵称为美丽矩阵,当且仅当:

  • 它恰好包含给定的全部数字;空单元格以 00 表示;
  • 每个 2×22\times2 子矩阵至多有 33 个非空单元格;
  • 每个 2×22\times2 子矩阵的两条对角线上,若两个端点均非空,则端点数字必须不同。

请构造边长 nn 最小的美丽矩阵。

输入格式

第一行一个整数 tt,表示测试用例数。

每个测试用例的第一行包含两个整数 m,km,k。

第二行包含 kk 个整数 a1,a2,…,aka_1,a_2,\ldots,a_k,其中 aia_i 表示数字 ii 的个数。

输出格式

对每个测试用例,先输出最小边长 nn。

随后输出 nn 行,每行 nn 个整数。第 ii 行第 jj 个数 bi,jb_{i,j} 应满足 0≤bi,j≤k0\le b_{i,j}\le k;其中 00 表示空单元格。

若有多种合法构造,输出任意一种。

样例输入

2
3 4
2 0 0 1
15 4
2 4 8 1

样例输出

2
4 1
0 1
5
3 0 0 2 2
3 2 3 3 0
0 1 0 4 0
3 0 0 0 0
2 1 3 3 3

数据范围

对所有数据:

  • 1≤t≤1041\le t\le10^4;
  • 1≤m,k≤1051\le m,k\le10^5;
  • 0≤ai≤m0\le a_i\le m 且 ∑i=1kai=m\sum_{i=1}^{k}a_i=m;
  • 单个输入文件内所有测试用例的 mm 之和、kk 之和均不超过 2×1052\times10^5。
子任务编号 分值 特殊限制
1 20 每组 m,k≤5m,k\le5,单文件 ∑m,∑k≤25\sum m,\sum k\le25
2 40 每组 m,k≤200m,k\le200,单文件 ∑m,∑k≤1000\sum m,\sum k\le1000
3 无特殊限制

各子任务数据彼此独立计分。

提示

00 只表示空单元格,不属于给定数字,也不参与对角线相等的判断。