#pragma warning(disable:4996)
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
#include<iostream>
#include<time.h>
using namespace std;
#define REP(i,n) for(int i=0;i<(n);i++)
char view[10][10][10];
char pos[10][10][10];
int n;
char get_char()
{
char a;
for (;;)
{
a = getchar();
if (a <= 'Z'&&a >= 'A' || a == '.')
return a;
}
}
void get(int k, int i, int j, int len, int &x, int &y, int &z)
{
if (k == 0)
{
x = len;
y = j;
z = i;
}
if (k == 1)
{
x = n - j - 1;
y = len;
z = i;
}
if (k == 2)
{
x = n - len - 1;
y = n - j - 1;
z = i;
}
if (k == 3)
{
x = j;
y = n - len - 1;
z = i;
}
if (k == 4)
{
x = n - i - 1;
y = j;
z = len;
}
if (k == 5)
{
x = i;
y = j;
z = n - len - 1;
}
}
int vs_main()
{
while (cin >> n, n)
{
REP(i, n)REP(k, 6)REP(j, n)view[k][i][j] = get_char();
REP(i, n)REP(j, n)REP(k, n)pos[i][j][k] = '#';
REP(k, 6)REP(i, n)REP(j, n)
if (view[k][i][j] == '.')
REP(p, n)
{
int x, y, z;
get(k, i, j, p, x, y, z);
pos[x][y][z] = '.';
}
for (;;)
{
bool flag = true;
REP(k, 6)REP(i, n)REP(j, n)
{
if (view[k][i][j] != '.')
REP(p, n)
{
int x, y, z;
get(k, i, j, p, x, y, z);
if (pos[x][y][z] == '.')continue;
if (pos[x][y][z] == '#')
{
pos[x][y][z] = view[k][i][j];
break;
}
if (pos[x][y][z] == view[k][i][j])
break;
pos[x][y][z] = '.';
flag = false;
}
}
if (flag)break;
}
int ans = 0;
REP(i, n)REP(j, n)REP(k, n)
if (pos[i][j][k] != '.')
ans++;
printf("Maximum weight: %d gram(s)\n", ans);
}
return 0;
}
int main()
{
int start = clock();
freopen("in.txt", "r", stdin);
//freopen("E:/out.txt","w",stdout);
printf("#===================#\n");
vs_main();
printf("#===================#\n");
printf("Time:%.3lf\n", double(clock() - start) / CLOCKS_PER_SEC);
//system("pause");
return 0;
}
wa
#pragma warning(disable:4996)
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
#include<iostream>
#include<time.h>
#include<cstdlib>
#define REP(i,n) for(int i=0;i<(n);i++)
using namespace std;
char view[7][15][15];
char board[15][15][15];
int n;
int flag;
bool done;
void Delete1(int k, int len, int i, int j)
{
int x, y, z;
if (k == 1)
{
x = len;
y = j;
z = i;
}
if (k == 2)
{
x = n - j - 1;
y = len;
z = i;
}
if (k == 3)
{
x = n - len - 1;
y = n - j - 1;
z = i;
}
if (k == 4)
{
x = j;
y = n - len - 1;
z = i;
}
if (k == 5)
{
x = n - i - 1;
y = j;
z = len;
}
if (k == 6)
{
x = i;
y = j;
z = n - len - 1;
}
if (view[k][i][j] == '.')
{
board[x][y][z] = '.';
}
}
void Delete2(int k,int len, int i, int j)
{
if (view[k][i][j] != '.')
{
int x, y, z;
if (k == 1)
{
x = len;
y = j;
z = i;
}
if (k == 2)
{
x = n - j - 1;
y = len;
z = i;
}
if (k == 3)
{
x = n - len - 1;
y = n - j - 1;
z = i;
}
if (k == 4)
{
x = j;
y = n - len - 1;
z = i;
}
if (k == 5)
{
x = n - i - 1;
y = j;
z = len;
}
if (k == 6)
{
x = i;
y = j;
z = n - len - 1;
}
if (board[x][y][z] == '#')
{
board[x][y][z] = view[k][i][j];
flag = 1;
return;
}
if (view[k][i][j] == board[x][y][z])
{
flag = 1;
return;
}
board[x][y][z] = '.';
done = false;
return;
}
return;
}
int vs_main()
{
while (cin >> n,n)
{
for (int i = 0; i < n; i++)
{
for (int k = 1; k <= 6; k++)
{
for (int j = 0; j < n; j++)
{
cin >> view[k][i][j];
}
}
}
for (int k = 0; k < n; k++)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
board[k][i][j] = '#';
}
}
}
for (int k = 1; k <= 6; k++)
{
for (int len = 0; len < n; len++)//
{
for (int i = 0; i <n; i++)
{
for (int j = 0; j <n; j++)
{
Delete1(k,len, i, j);
}
}
}
}
done = true;
for (int k = 1; k <= 6; k++)
{
for (int len = 0; len < n; len++)//
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
Delete2(k, len, i, j);
if (flag == 1)
break;
}
}
}
}
int count = 0;
for (int k = 0; k < n; k++)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (board[k][i][j] != '.')
count++;
}
}
}
printf("Maximum weight: %d gram(s)\n", count);
}
return 0;
}
int main()
{
int start = clock();
freopen("in.txt", "r", stdin);
//freopen("E:/out.txt","w",stdout);
printf("#===================#\n");
vs_main();
printf("#===================#\n");
printf("Time:%.3lf\n", double(clock() - start) / CLOCKS_PER_SEC);
//system("pause");
return 0;
}