//凸包,注意凸包边上的点也要包含进去,然后最大速度为0的话都输出0
#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
using namespace std;
bool fl[555],damn[555],inc[555];
struct P{
int in,x,y,v;
friend bool operator < (P a,P b){
if (a.v>b.v) return 1;
if (a.v==b.v){
return (a.x<b.x)||(a.x==b.x&&a.y<b.y);
}
return 0;
}
}p[555];
P ch[555];
P operator - (P A, P B){
P c;
c.x=A.x-B.x;
c.y=A.y-B.y;
return c;
}
int cross(P A,P B){
return A.x*B.y-A.y*B.x;
}
int conv(int m){
int mm=0;
memset(inc,0,sizeof(inc));
for (int i=0;i<m;i++){
while (mm>1&&cross(ch[mm-1]-ch[mm-2],p[i]-ch[mm-2])<0) mm--;
ch[mm++]=p[i];
}
for (int i=1;i<mm;i++) inc[ch[i].in]=1;
int k=mm;
for (int i=m-2;i>=0;i--){
while (mm>k&&cross(ch[mm-1]-ch[mm-2],p[i]-ch[mm-2])<0) mm--;
if (!inc[p[i].in])
ch[mm++]=p[i];
}
if (m>1) mm--;
return mm;
}
int main(){
//freopen("1.in","r",stdin);
int n,m,ca=1;
while (scanf("%d",&n),n){
for (int i=0;i<n;i++){
scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].v);
p[i].in=i;
}
printf("Case #%d: ",ca++);
sort(p,p+n);
if(p[0].v==0){for (int i=0;i<n;i++)printf("0");printf("\n");continue;}
memset(fl,0,sizeof(fl));
memset(damn,0,sizeof(damn));
m=1;
for (int i=1;i<n;i++){
if (p[i].v!=p[i-1].v) break;
if (p[i].x==p[i-1].x&&p[i].y==p[i-1].y){
damn[p[i].in]=damn[p[i-1].in]=1;
}
}
for (int i=1;i<n;i++){
if (p[i].v!=p[i-1].v) break;
if (p[i].x!=p[i-1].x||p[i].y!=p[i-1].y){
p[m++]=p[i];
}
}
int chs;
chs=conv(m);
for (int i=0;i<chs;i++){
fl[ch[i].in]=1;
}
for (int i=0;i<n;i++){
if (fl[i]==1&&!damn[i]) printf("1");
else printf("0");
}
printf("\n");
}
return 0;
}