c++求解!!!!!!!!

矩形木板上分成了n×m个小格子,每个小格子中都有一个特殊的开关,这个开关有a,b,c三种状态。在一开始所有的开关均是a状态的。小C与小Z在玩一种博弈游戏(即可以假设两人都绝顶聪明,每次都会采用最优策略),他们轮流拨动某个开关,小C只能把某一个开关的a状态拨向b状态。而小Z只能把某一个开关的a状态拨向c状态。并且当一个开关从a变c或从a变b后,周围上下左右的开关会因为开关接通产生的电磁力锁定效应而导致导致无法拨动。当木板上所有的开关均已经被拨动或不能拨动时,先手时,如果c状态开关数大于b状态开关数,那么小Z就赢了。后手时,如果c状态开关数大于或等于b状态开关数,那么小Z就赢了。

现在在已经知道小Z是先拨还是后拨的情况下,小Z可以在游戏一开始施展魔法,割掉一部分格子,剩余格子要求组成一个完整正方形。(剩余格子仍然完整,没有出现半个格子的情况)

问你在保证小Z能赢的情况下,割剩下的木板的最大格子数量是多少?(注意小Z可以不割,但如果初始状态不是正方形,那么就必须割)

因为小Z和小C很爱玩,所以有多组数据输入。每组数据相互独立,小Z只能在每轮游戏开始之前使用一次魔法。

【输入数据】
第一行一个N,表示数据组数。

之后N行,每行3个数,t,n,m, t==0表示小Z后拨,t==1 表示小Z先拨。 n,m意思如上文所示

【输出数据】
N行,每行一个数,表示最大格子数量。

如果不能满足,则输出 -1

【输入样例】
3
1 2 2
1 1 3
0 1 1
【输出样例】
1
1
-1
提示如果只有1个格子,则先拨赢。

【数据范围】
对于50%的数据 0<n,m<51
对于100%的数据 0<n,m<1002,0<N<11

这道题看完后不知道你会不会联想到一道题《开关灯》,你可以去博客里找找这道题的题解,看完后,再联想这道题,看有没有想法,没有我再告诉你