// ConsoleApplication1.cpp: 定义控制台应用程序的入口点。
//
//
#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <cstdio>
#define INF 1000000
#include <iostream>
#include <cstring>
#include <cstdio>
#define INF 1000000
using namespace std;
int Map[8][8], vis[8][8], N, xx[4] = { 0, 0, 1, -1 }, yy[4] = {1, -1, 0, 0}, score0, score1, X, Y;
void DFS(int num, int m, int n, int *s) {
for (int i = 0; i < 4; ++i) {
int x, y;
x = m + xx[i];
y = n + yy[i];
if (x >= 0 && x < N && y >= 0 && y < N && !vis[x][y] && Map[x][y] == num) {
*s = *s + 1;
vis[x][y] = 1;
DFS(num, x, y, s);
}
}
}
for (int i = 0; i < 4; ++i) {
int x, y;
x = m + xx[i];
y = n + yy[i];
if (x >= 0 && x < N && y >= 0 && y < N && !vis[x][y] && Map[x][y] == num) {
*s = *s + 1;
vis[x][y] = 1;
DFS(num, x, y, s);
}
}
}
int alpha_beta(int cnt, int player, int alpha, int beta, int now_cnt, int now_player) {
int i, j, val;
if (cnt == N * N) {
score0 = score1 = 0;
memset(vis, 0, sizeof(vis));
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j) {
if (Map[i][j] == 1 && !vis[i][j]) {
vis[i][j] = 1;
int score = 1;
DFS(1, i, j, &score);
if (score > score0)
score0 = score;
}
if (Map[i][j] == 2 && !vis[i][j]) {
vis[i][j] = 1;
int score = 1;
DFS(2, i, j, &score);
if (score > score1)
score1 = score;
}
}
return score0 - score1;
}
if (player == 0) {
for (i = 0; i < N; ++i)
for (int j = 0; j < N; ++j) {
if (Map[i][j])
continue;
Map[i][j] = 1;
val = alpha_beta(cnt + 1, 1 - player, alpha, beta, now_cnt, now_player);
Map[i][j] = 0;
if (val > alpha) {
alpha = val;
if (now_player == 0 && cnt == now_cnt) {
X = i;
Y = j;
}
}
if (alpha >= beta)
return alpha;
}
return alpha;
}
else {
for (i = 0; i < N; ++i)
for (int j = 0; j < N; ++j) {
if (Map[i][j])
continue;
Map[i][j] = 2;
val = alpha_beta(cnt + 1, 1 - player, alpha, beta, now_cnt, now_player);
Map[i][j] = 0;
if (val < beta) {
beta = val;
if (now_player == 1 && cnt == now_cnt) {
X = i;
Y = j;
}
}
if (alpha >= beta)
return beta;
}
return beta;
}
}
for (i = 0; i < N; ++i)
for (int j = 0; j < N; ++j) {
if (Map[i][j])
continue;
Map[i][j] = 1;
val = alpha_beta(cnt + 1, 1 - player, alpha, beta, now_cnt, now_player);
Map[i][j] = 0;
if (val > alpha) {
alpha = val;
if (now_player == 0 && cnt == now_cnt) {
X = i;
Y = j;
}
}
if (alpha >= beta)
return alpha;
}
return alpha;
}
else {
for (i = 0; i < N; ++i)
for (int j = 0; j < N; ++j) {
if (Map[i][j])
continue;
Map[i][j] = 2;
val = alpha_beta(cnt + 1, 1 - player, alpha, beta, now_cnt, now_player);
Map[i][j] = 0;
if (val < beta) {
beta = val;
if (now_player == 1 && cnt == now_cnt) {
X = i;
Y = j;
}
}
if (alpha >= beta)
return beta;
}
return beta;
}
}
int main()
{
int S0, S1, cnt;
char ch;
while (cin >> N) {
if (N == 0)
break;
S0 = S1 = cnt = 0;
memset(Map, 0, sizeof(Map));
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
cin >> ch;
if (ch == '0') {
cnt++;
S0++;
Map[i][j] = 1;
}
else if (ch == '1') {
cnt++;
S1++;
Map[i][j] = 2;
}
else
Map[i][j] = 0;
}
}
{
int S0, S1, cnt;
char ch;
while (cin >> N) {
if (N == 0)
break;
S0 = S1 = cnt = 0;
memset(Map, 0, sizeof(Map));
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
cin >> ch;
if (ch == '0') {
cnt++;
S0++;
Map[i][j] = 1;
}
else if (ch == '1') {
cnt++;
S1++;
Map[i][j] = 2;
}
else
Map[i][j] = 0;
}
}
if (S0 == S1) {
int score0 = alpha_beta(cnt, 0, -INF, INF, cnt, 0);
printf("(%d,%d) %d\n", X, Y, score0);
}
else {
int score1 = alpha_beta(cnt, 1, -INF, INF, cnt, 1);
printf("(%d,%d) %d\n", X, Y, -score1);
}
}
return 0;
}
int score0 = alpha_beta(cnt, 0, -INF, INF, cnt, 0);
printf("(%d,%d) %d\n", X, Y, score0);
}
else {
int score1 = alpha_beta(cnt, 1, -INF, INF, cnt, 1);
printf("(%d,%d) %d\n", X, Y, -score1);
}
}
return 0;
}