#include<map>
#include<cmath>
#include<queue>
#include<cmath>
#include<string>
#include<cstdio>
#include<stack>
#include<iostream>
#include<cstring>
#include<algorithm>
#define inf 0x3f3f3f3f
#define eps 1e-8
#define ls l,mid,rt<<1
#define rs mid+1,rt,rt<<1|1
#define LL __int64
#define ll long long
using namespace std;
char str[110][110];
bool vis[110][110];
int cx[]={0,-1,0,1},cy[]={1,0,-1,0};
int cx1[]= {-1 , -1 , -1 , 0 , 0 , 1 , 1 , 1};
int cy1[]={-1 , 0 , 1 , -1 , 1 , -1 , 0 , 1};
int n,ans1,ans2;
void dfs1(int x,int y){
vis[x][y] = true;
for(int i = 0;i < 4;++ i){
int tx = x+cx[i];
int ty = y+cy[i];
if(tx>=0&&tx<n&&ty>=0&&ty<n&&str[tx][ty]=='1'&&!vis[tx][ty]){
dfs1(tx,ty);
}
}
}
void dfs2(int x,int y){
vis[x][y] = true;
for(int i = 0;i < 8;++ i){
int tx = x+cx1[i];
int ty = y+cy1[i];
if(tx>=0&&tx<n&&ty>=0&&ty<n&&str[tx][ty]=='1'&&!vis[tx][ty]){
dfs2(tx,ty);
}
}
}
int main(){
int i,j,k,cla = 1;
while(~scanf("%d",&n)&&n){
for(i = 0;i < n; ++ i){
scanf("%s",str[i]);
}
ans1 = ans2 =0;
memset(vis,false,sizeof(vis));
for(i = 0;i < n;++ i){
for(j = 0;j < n;++ j){
if(!vis[i][j]&&str[i][j]=='1'){
ans1++;
dfs1(i,j);
}
}
}
memset(vis,false,sizeof(vis));
for(i = 0;i < n;++ i){
for(j = 0;j < n;++ j){
if(!vis[i][j]&&str[i][j]=='1'){
ans2++;
vis[i][j]=true;
dfs2(i,j);
}
}
}
printf("Case %d: ",cla++);
printf("%d %d\n\n",ans1,ans2);
}
return 0;
}