CF266C Below the Diagonal
题目描述
给你一个 $n$ 行 $n$ 列的矩阵,每行从上到下编号依次为 $1$ 至 $n$,每列从左到右编号依次为 $1$ 至 $n$。矩阵中,恰好有 $n-1$ 个位置上的元素为 $1$,其余元素为 $0$。你可以对矩阵进行如下操作:
1. 交换矩阵的第 $i$ 行与第 $j$ 行;
1. 交换矩阵的第 $i$ 列与第 $j$ 列;
你的目标是使得矩阵中每个 $1$ 的位置都在主对角线以下,即对于 $\forall\ i,j\in [1,n]$,若第 $i$ 行第 $j$ 列上的元素为 $1$,则应有 $i>j$。
请给出操作方案。
输入格式
第一行读入一个整数 $n\ (2\le n \le 1000)$,表示矩阵的行数和列数。接下来读入 $n-1$ 行,每行包含两个整数 $(x_k,y_k)$,表示 $1$ 的位置。
保证给出的位置两两不同。
输出格式
第一行输出一个整数 $m$ $1\le m\le10^5$ 表示操作步数。
接下来输出 $m$ 行,每行包含三个整数 $t,i,j\ (1\le t\le 2,1\le i,j\le n,i\not=j)$。其中 $t=1$ 表示你要交换两行,$t=2$ 表示你要交换两列,$i,j$ 表示你要交换的行或列的编号。
你不需要最小化操作步数,但你的操作步数不应超过 $10^5$。如果有多种操作方式,你可以输出任意一种。