给定一个包含n行和m列的表。每一行中的数字形成从1到m的整数排列。
你可以在每一行中选取两个元素并交换它们,但是每一行这样的操作不能超过一次。
同样的,你可以选择两列并交换它们,这样的操作不能超过1次。
总共允许执行0到n+1个操作。操作可以以任何顺序执行。
现在给你的任务是判断能否在进行一系列操作后使得每一行的数字从小到大排列,即 1 到 m 。换句话说,就是能否按照给出的规则进行操作使每一行单调递增。
输入的第一行包含两个整数n和m(1≤n,m≤20)−给定表的行数和列数。
接下来的n行每一行都包含m个整数——表的元素。保证每一行的数字都是1到m的整数排列。
如果有办法通过遵循给定的规则来获得每一行中的单位排列,则在输出的唯一行中打印“YES”(不带引号)。否则,打印“NO”(不带引号)。
2 4 1 3 2 4 1 3 4 2
YES
4 4 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3
NO
3 6 2 1 3 4 5 6 1 2 4 3 5 6 1 2 3 4 6 5
YES
提示:在第一个例子中,我们可以这样做:
1.交换第二和第三列。现在这个表是1234 1432
2.在第二行,交换第二个和第四个元素。现在表是1234 1234
4 4
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
NO