抓住那只猪02(pig)

题目描述

Y 同学得到了一个大小为 n×nn \times n 的字符方阵,其中每个位置都填有一个小写英文字母。

已知该方阵满足以下条件:

  • 方阵中恰好出现了 nn 种不同的字母;
  • 对于每一种出现过的字母 cc,恰好有 11 头与之对应的猪;
  • 因而一共恰好有 nn 头猪。

对于字母 cc 对应的那头猪,它只能被放置在字符为 cc 的格子上。

现在,Y 同学需要在方阵中为这 nn 头猪各选出一个位置,并满足以下要求:

  1. 对于任意一头猪,它所选位置上的字符必须等于该猪对应的字母;
  2. 每一种字母恰好被选中一次;
  3. 任意两头猪不能位于同一行;
  4. 任意两头猪不能位于同一列;
  5. 任意两头猪不能在八个方向上相邻。更形式化地说,若两头猪分别位于 (x1,y1)(x_1,y_1)(x2,y2)(x_2,y_2),则不能同时满足$$\lvert x_1-x_2\rvert \le 1,\ \lvert y_1-y_2\rvert \le 1 $$且 (x1,y1)(x2,y2)(x_1,y_1)\ne(x_2,y_2)

请你输出所有满足条件的合法方案,并按字典序从小到大输出。

对于任意一个合法方案,由于共有 nn 头猪且任意两头猪不能位于同一行,因此每一行恰好会选出一个位置。记第 ii 行被选中的列号为 pip_i,则该方案可唯一表示为长度为 nn 的序列

(p1,p2,,pn)(p_1,p_2,\dots,p_n)。

规定方案 (p1,p2,,pn)(p_1,p_2,\dots,p_n) 的字典序小于方案 (q1,q2,,qn)(q_1,q_2,\dots,q_n),当且仅当存在最小的正整数 tt,满足:

  • 对于所有 1i<t1 \le i < t,都有 pi=qip_i=q_i
  • pt<qtp_t<q_t

你需要按照上述字典序输出全部合法方案。

坐标从 11 开始计数,左上角位置记为 (1,1)(1,1)

输入格式

第一行输入一个整数 nn,表示方阵的大小,同时也表示猪的数量。

接下来输入 nn 行,每行一个长度为 nn 的字符串,表示该字符方阵。

输出格式

第一行输出一个整数 kk,表示合法方案的总数。

接下来输出 kk 行,第 ii 行输出第 ii 个合法方案。

对于每个方案,输出 nn 个整数 p1,p2,,pnp_1,p_2,\dots,p_n,其中 pjp_j 表示该方案中第 jj 行被选中位置的列号。相邻两个整数之间用一个空格分隔。

所有方案必须按字典序从小到大输出。

样例

样例输入 #1

4
dadb
ddbb
cddd
bddd

样例输出 #1

1
2 4 1 3

样例解释

方阵为:

dd aa dd bb
dd bb
cc dd
bb

按题意,每种字母对应一头猪,且任意两头猪不能同行、同列,也不能在八个方向相邻。

样例中的唯一合法方案为:

  • 11 行选第 22 列;
  • 22 行选第 44 列;
  • 33 行选第 11 列;
  • 44 行选第 33 列。

对应序列为:

(2,4,1,3)(2,4,1,3)

检查可知:

  • 这四个位置上的字母两两对应不同的猪;
  • 没有两头猪位于同一行或同一列;
  • 也没有两头猪在八个方向相邻。

数据范围与约定

对于 100100% 的数据,保证 1n101 \le n \le 10,方阵中的字符均为小写英文字母,方阵中恰好出现了 nn 种不同的字符,合法方案总数不超过 5×1055 \times 10^5

测试点编号 分值 nn \le 特殊性质
121\sim2 10 33 特殊性质 A
343\sim4 55 特殊性质 B
565\sim6 66 特殊性质 C
7107\sim10 20 77
111411\sim14 88
152015\sim20 30 1010
  • 特殊性质 A:每种字母在方阵中恰好出现 11 次。
  • 特殊性质 B:对于任意一种字母,其在方阵中的出现次数不超过 22
  • 特殊性质 C:合法方案总数不超过 1010