3、钻石游戏

3、钻石游戏

问题描述:
一个M行N列的棋盘,里面放了M * N个各种颜色的钻石。每一次你可以选择任意两个相邻的颜色不同的钻石,进行交换。两个格子相邻的定义是两个格子有一条公共边。每次交换的分值为通过这次交换后能够形成的最大矩形的面积,具体请见样例。
跟传统的钻石游戏不太一样的是,交换后钻石不会消除。现在告诉你每一次操作,请输出每一次所能得到的分值。

问题输入:
第一行二个整数M,N。
接下来M行N列,表示第I行第J列的钻石的颜色(1~9)。
第M+2行有一个正整数P,表示钻石交换的次数。
接下来P行,每行四个正整数x1,y1,x2,y2,1<=x1,x2<=M,1<=y1,y2<=N,表示交换(x1,y1)和(x2,y2)的钻石。
保证(x1,y1),(x2,y2)的颜色不相同,并且其必定相邻。

问题输出:
P行,输出每次交换得到的分值。

Sample 1

Input

4 5
1 1 1 3 4
1 1 2 1 2
1 1 1 2 2
3 3 3 4 4
2
2 3 2 4
1 4 1 5

Output

9
1

【样例解释】

Limitation

1s, 256MiB for each test case.
数据限制:
40%的数据,M,N <= 50,P <= 1000;
100%的数据,M,N <= 500,P <= 1000。