#include <iostream>
#define N 102
using namespace std;
char TA[N][N];//用于输入三角形
int n;//等边三角形边长
void makeTA()
{
for(int i = 1; i <= n; i++)
cin>>TA[i];
}
void Solve()
{
int max = 0,min;
int a,b;
char flag;//flag == 0,表示此行可以是'@'居多,或是'*'居多
//flag == 1,表示此行以'@'居多
//flag == 2,表示此行以'*'居多
int i,j;
for(i = 2; i <= n; i += 2)
max += i / 2;
min = max;//对于偶数行'@'和'*'的数目必定相等,
//因为'@'和'*'决不相连,且其不依赖于上下行
for(i = 1; i <= n; i += 2)
{
flag = 0;
for(j = 0; j < i; j++)
if(TA[i][j] != '?')
if(j % 2 == 0)
{
if(TA[i][j] == '@')
{ flag = 1; break;}//此种情况'@'比'*'多一个
else if(TA[i][j] == '*')
{ flag = 2;break;}//此种情况'@'比'*'少一个
}
else
{
if(TA[i][j] == '@')
{ flag = 2; break;}//此种情况'@'比'*'少一个
else if(TA[i][j] == '*')
{ flag = 1;break;}//此种情况'@'比'*'多一个
}
a = i / 2; b = a + 1;
switch(flag)
{
case 0: max += b; min += a;break;
case 1: max += b; min += b;break;
default : max += a;min += a;break;
}
}
cout<<max<<" "<<min<<endl;
}
int main()
{
while(cin>>n && n >= 0)
{
makeTA();
Solve();
}
return 0;
}
#define N 102
using namespace std;
char TA[N][N];//用于输入三角形
int n;//等边三角形边长
void makeTA()
{
for(int i = 1; i <= n; i++)
cin>>TA[i];
}
void Solve()
{
int max = 0,min;
int a,b;
char flag;//flag == 0,表示此行可以是'@'居多,或是'*'居多
//flag == 1,表示此行以'@'居多
//flag == 2,表示此行以'*'居多
int i,j;
for(i = 2; i <= n; i += 2)
max += i / 2;
min = max;//对于偶数行'@'和'*'的数目必定相等,
//因为'@'和'*'决不相连,且其不依赖于上下行
for(i = 1; i <= n; i += 2)
{
flag = 0;
for(j = 0; j < i; j++)
if(TA[i][j] != '?')
if(j % 2 == 0)
{
if(TA[i][j] == '@')
{ flag = 1; break;}//此种情况'@'比'*'多一个
else if(TA[i][j] == '*')
{ flag = 2;break;}//此种情况'@'比'*'少一个
}
else
{
if(TA[i][j] == '@')
{ flag = 2; break;}//此种情况'@'比'*'少一个
else if(TA[i][j] == '*')
{ flag = 1;break;}//此种情况'@'比'*'多一个
}
a = i / 2; b = a + 1;
switch(flag)
{
case 0: max += b; min += a;break;
case 1: max += b; min += b;break;
default : max += a;min += a;break;
}
}
cout<<max<<" "<<min<<endl;
}
int main()
{
while(cin>>n && n >= 0)
{
makeTA();
Solve();
}
return 0;
}