#include<stdio.h>
//#define MAX_N (100)
#define MAX_N 5
int N;
int V[MAX_N][MAX_N];
#define MAX_SUB (20)
typedef struct {
int y, x, v;
} COORD;
COORD SUB[MAX_SUB];
int subN;
void CheckMatrix(int y, int x) {
int dx = 0, dy = 0;
for (; V[y][x + dx]; ++dx); // dx 가 있으면 조건 통과
for (; V[y + dy][x]; ++dy); // V에 숫자가 있으면 조건 통과
for (int ny = y; ny <= y + dy; ++ny)
for (int nx = x; nx <= x + dx; ++nx) V[ny][nx] = 0;
SUB[subN].y = dy;
SUB[subN].x = dx;
SUB[subN].v = dy * dx;
++subN;
}
int main() {
freopen("input.txt", "r", stdin);
int T; scanf("%d", &T);
for (int t = 1; t <= T; ++t) {
/* Input */
scanf("%d", &N);
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j) scanf("%d", &V[i][j]);
/* Check Matrix */
subN = 0;
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
if (V[i][j]) CheckMatrix(i, j);
/* Sort */
for (int i = 0; i < subN; ++i)
for (int j = i + 1; j < subN; ++j)
if (SUB[i].v > SUB[j].v ||
(SUB[i].v == SUB[j].v && SUB[i].y > SUB[j].y)) {
COORD t = SUB[i]; SUB[i] = SUB[j]; SUB[j] = t;
}
/* Output */
printf("#%d %d", t, subN);
for (int i = 0; i < subN; ++i) {
printf(" %d %d", SUB[i].y, SUB[i].x);
// SUB[i].y = SUB[i].x = SUB[i].v = 0;
}
printf("\n");
}
return 0;
}
댓글