First line of each case is an integer N (1 ≤ N ≤ 100), the number of vertexes.
Following N lines each contains N integers. All these integers are less than 1000000.
The jth integer of ith line is the shortest path from vertex i to j.
The ith element of ith line is always 0. Other elements are all positive.
3 3 0 1 1 1 0 1 1 1 0 3 0 1 3 4 0 2 7 3 0 3 0 1 4 1 0 2 4 2 0
Case 1: 6 Case 2: 4 Case 3: impossible
//
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=110;
int a[maxn][maxn];
int vis[maxn][maxn];
int n;
int main()
{
int ci,pl=1;scanf("%d",&ci);
while(ci--)
{
scanf("%d",&n);
int ans=n*(n-1);
memset(vis,0,sizeof(vis));
int flag=1;
for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&a[i][j]);
for(int k=0;k<n&&flag;k++)
{
for(int i=0;i<n&&flag;i++)
{
for(int j=0;j<n&&flag;j++)
{
if(i!=j&&j!=k&&i!=k&&!vis[i][k]&&!vis[k][j]&&!vis[i][j])
{
if(a[i][j]==a[i][k]+a[k][j])
{
ans--;
vis[i][j]=1;
}
else if(a[i][j]>a[i][k]+a[k][j])
{
flag=0;break;
}
}
}
}
}
if(flag) printf("Case %d: %d\n",pl++,ans);
else printf("Case %d: impossible\n",pl++);
}
return 0;
}