#P16066. [2022国家队训练南京站]菱形覆盖

[2022国家队训练南京站]菱形覆盖

题目描述

给定一个边长为 nn 的正三角形。它被划分成 n2n^2 个边长为 11 的小正三角形,其中:

  • 正着的小三角形有 n(n+1)2\frac{n(n+1)}2 个;
  • 倒着的小三角形有 n(n1)2\frac{n(n-1)}2 个。

现在有 nn 个正着的小三角形被切掉,因此剩下:

  • n(n1)2\frac{n(n-1)}2 个正着的小三角形;
  • n(n1)2\frac{n(n-1)}2 个倒着的小三角形。

你需要判断剩余区域能否被 n(n1)2\frac{n(n-1)}2 个边长为 11、内角为 6060^\circ120120^\circ 的菱形完全覆盖。如果可以,输出任意一种覆盖方案。

边长为 4 的正三角形,以及三种菱形类型

上图左侧为边长为 44 的正三角形;右侧为三种不同的菱形,编号从左到右分别为 1,2,31,2,3

上图展示了一种 n=4n=4 的例子。

输入格式

第一行一个正整数 nn,表示大正三角形的边长。

接下来 nn 行描述哪些正着的小三角形被切掉。第 ii 行(1in1\le i\le n)是一个长度为 ii01 字符串,其中第 jj 个字符含义如下:

  • 0:第 ii 行第 jj 个正着的小三角形被切掉;
  • 1:该正着的小三角形保留。

输出格式

如果不存在合法覆盖方案,输出:

Impossible!

否则输出任意一组合法方案。方案共包含 nn 行,第 ii 行为一个长度为 ii 的字符串;第 ii 行第 jj 个字符表示第 ii 行第 jj 个正着的小三角形的状态:

  • -:该小三角形被切掉;
  • 1:该小三角形被第一种菱形覆盖;
  • 2:该小三角形被第二种菱形覆盖;
  • 3:该小三角形被第三种菱形覆盖。

样例

输入

4
0
11
010
1101

输出

-
21
-3-
33-1

数据范围与子任务

保证:

n5000n\le 5000
子任务 分值 限制
1 5 n5n\le 5
2 10 n10n\le 10
3 35 n500n\le 500
4 5 保证每一行恰好有一个正着的小三角形被切掉
5 15 保证存在至少一组解
6 30 无特殊限制