#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
struct point
{
int x,y;
}p[20];
int T,dp[1<<18],n,b[20][20],tot,INF=2000000000;
vector<int>sub[1<<18];
bool check(int x,int y,int z)
{
return (p[x].x-p[y].x)(p[x].y-p[z].y)==(p[x].y-p[y].y)(p[x].x-p[z].x);
}
int main()
{
for(int i=0;i<(1<<18);i++)
for(int j=0;j<18;j++)
if(!(i&(1<<j)))
sub.push_back(j);
scanf("%d",&T);
for(int w=1;w<=T;w++)
{
memset(b,0,sizeof(b));
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&p.x,&p.y);
b=(1<<i);
}
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
for(int k=0;k<n;k++)
if(check(i,j,k))
b[j]|=(1<<k);
for(int i=1;i<(1<<n);i++)
dp=INF;
dp[0]=0;
for(int mask=0;mask<(1<<n);mask++)
{
int i=sub[mask][0];
for (int end=0;end<sub[mask].size();end++)
{
int j=sub[mask][end];
dp[mask|b[j]]=min(dp[mask|b[j]],dp[mask]+1);
}
}
printf("Case %d: %d\n",w,dp[(1<<n)-1]);
}
return 0;
}