德邦国王
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述


        在遥远的德邦草原,有一个古老的国度。
        这里的国王有一种特殊的能力,他可以在限定次数内互换自己和某些子民的位置
        现在国王需要让自己的子民排列成一个整齐的方阵接受检阅,但是他们的动作太慢了
        于是国王决定用自己的能力来完成剩余的排列,从而将自己的子民排列
        成能让他满意的样子。 
        

        请你帮忙计算国王最少需要瞬间移动多少次,才能将方阵变成他想要的样子。 
        注意国王不得移动出方阵,国王的瞬间移动方式将由输入数据给出。          
        
        
        
        输出描述 
            

输入描述:

        N K M分别表示矩阵的大小、国王的瞬移方法数量和国王的瞬间移动限定次数 
        接下来 K 行 Xi Yi 表示国王可以让自己和 (X + Xi, Y + Yi)上的子民位置互换
        其中 X Y 表示国王当前的位置
        接下来 N 行为一个矩阵,表示当前的矩阵排列
        接下来 N 行为一个矩阵,表示能让国王满意的矩阵排列 
        
        矩阵仅由(0, 1, 2)组成,其中 0 表示女性子民,1 表示男性子民, 2 表示国王 
        
        1 <= N <= 5 
        1 <= K <= 8 
        1 <= M <= 15 

输出描述:

         如果国王可以在限定次数内将矩阵变成他喜欢的样子,请你输出最小次数
         反之,请你输出 -1 
示例1

输入

复制
3 2 1
1 -1
1 1
1 0 0
0 1 2
0 1 1
1 0 0 
0 1 1
0 2 1

输出

复制
1

说明

位于坐标(2, 3)的国王和位于坐标(3, 2)的男性子民
互换位置从而使得方阵变成了他喜欢的样子
示例2

输入

复制
3 1 1
-1 0
1 0 0
0 1 2
0 1 1
1 0 0 
0 1 1
0 2 1

输出

复制
-1

说明

此时国王只能往上移动,所以无法将方阵变成他喜欢的样子