CF1517C Fillomino 2

题目描述

Fillomino 是一道经典的逻辑谜题。(你不需要了解 Fillomino 也能解决本题。)在云栖镇的一间教室里,一些志愿者正在玩它的一个棋盘游戏变体: 给定一个 $n \times n$ 的棋盘。棋盘的行从上到下编号为 $1$ 到 $n$,列从左到右编号为 $1$ 到 $n$。位于第 $x$ 行第 $y$ 列的格子记作 $(x, y)$。棋盘的主对角线是所有 $(x, x)$($1 \le x \le n$)的格子。 在主对角线上写有 $\{1, 2, 3, \dots, n\}$ 的一个排列。每个格子上恰好写有一个数字。现在需要将主对角线及其下方的所有格子(共 $1+2+\ldots+n$ 个格子)划分为 $n$ 个连通区域,满足以下条件: 1. 每个区域必须是连通的。也就是说,从区域内任意一个格子出发,只经过该区域内的格子并每次移动到相邻格子,可以到达该区域内的任意其他格子。 2. 第 $x$ 个区域必须包含主对角线上数字为 $x$ 的格子($1 \le x \le n$)。 3. 第 $x$ 个区域包含的格子数必须恰好为 $x$($1 \le x \le n$)。 4. 主对角线及其下方的每个格子必须且仅属于一个区域。

输入格式

第一行包含一个整数 $n$($1 \le n \le 500$),表示棋盘的大小。 第二行包含 $n$ 个整数 $p_1, p_2, \ldots, p_n$,$p_i$ 表示在格子 $(i, i)$ 上写的数字。保证 $p_1, \ldots, p_n$ 是 $1$ 到 $n$ 的一个排列。

输出格式

如果不存在满足条件的划分,输出 $-1$。 否则,输出 $n$ 行。第 $i$ 行包含 $i$ 个数字。第 $j$ 个数字为 $x$,表示格子 $(i, j)$ 属于包含 $x$ 个格子的区域。

说明/提示

样例的解如下图所示: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1517C/9c1f0c1849ccf4ce0e7b23176bd91c953e348595.png) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1517C/9e88a2fdc4b038adc182da7d0d66d5d0dcc6a27e.png) 由 ChatGPT 4.1 翻译