#include <bits/stdc++.h>
using namespace std;
int censor[1234];
string decode = "";
vector < string > vc;
map < string , string >mp;
void init(){
mp ["00001"] = "0";
mp ["10001"] = "1";
mp ["01001"] = "2";
mp ["11000"] = "3";
mp ["00101"] = "4";
mp ["10100"] = "5";
mp ["01100"] = "6";
mp ["00011"] = "7";
mp ["10010"] = "8";
mp ["10000"] = "9";
mp ["00100"] = "-";
mp ["00110"] = "S";
}
bool isReverse ( long n ){
int start[] = {0,0,1,1,0};
for( int i=n,j=0; i>=(n-4); j++,i-- ){
if(start[j] != censor[i])return false;
}
return true;
}
bool isRight ( long n ){
bool start[] = {0,0,1,1,0};
for( int i=1,j=0; i<=(5); j++,i++ ){
if(start[j] != censor[i])return false;
}
return true;
}
int gen_c( int n ){
long sum = 0;
for(int i=1; i<=n; i++){
int wci = ((decode[i] == '-') ? 10 : decode[i]-'0');
sum += ((((n-i)%10)+1) * wci);
}
return (sum % 11);
}
int gen_k( int n , int c ){ // send n+1 for calculating C
long sum = 0;
for(int i=1; i<=n; i++){
int wci = ((decode[i] == '-') ? 10 : decode[i]-'0');
sum += ((((n-i+1)%9)+1) * wci);
}
int wci = ((c == '-') ? 10 : c);
sum += ((((0)%9)+1) * wci);
return (sum %= 11);
}
double percent ( int n ){
return floor((n*(5.00/100.00)))+1;
}
int main() {
// freopen("in.txt","rt",stdin);
// freopen("out.txt","wt",stdout);
init();
long m,tc=0;
while ( scanf("%ld",&m), m ){
decode = "";
long small = (1 << 16), big = -( 1 << 16 );
for( int i=1; i<=m; i++ ){
scanf( "%d", &censor[i] );
small = (censor[i] < small ) ? censor[i] : small;
big = (censor[i] > big ) ? censor[i] : big;
}
double mrng1 = small - percent( small ); double mrng2 = small + percent( small );
double brng1 = big - percent ( big ); double brng2 = big + percent ( big );
for( int i=1; i<=m; i++ ){
if ( (censor[i] >= mrng1 && censor[i] <= mrng2) ) censor[i] = 0;
else if ( (censor[i] >= brng1 && censor[i] <= brng2)) censor[i] = 1; // Can be offset the condition
}
if( isReverse( m ) ){
for ( int i=m-5; i>=1; i-=6) censor[i] = 5;
string s1 = "";
for(int i=m; i>=1; i-- ){
if(censor[i] > 1 ){
decode += (mp[s1]) ;
s1 = "";
}
else s1 += (censor[i]+'0');
}
decode += (mp[s1]) ;
s1 = "";
}
else if (isRight(m)){
for ( int i=6; i<=m; i+=6){
censor[i] = 5;
}
string s1 = "";
for(int i=1; i<=m; i++ ){
if(censor[i] > 1 ){
decode += (mp[s1]) ;
s1 = "";
}
else s1 += (censor[i]+'0');
}
decode += (mp[s1]) ;
s1 = "";
}
int sz = decode.length();
int cc = gen_c(sz-4);
int kk = gen_k( sz-4,(decode[sz-3] == '-') ? 10 : decode[sz-3]-'0' );
cout << endl << decode << " " << cc << " " << kk << endl;
if(decode[0] != 'S' || decode[sz-1] != 'S' || sz <= 4){
printf("Case %d: bad code\n",++tc); continue;
}
int cfactor = (decode[sz-3] == '-') ? 10 : decode[sz-3] - '0';
int ffactor = (decode[sz-2] == '-') ? 10 : decode[sz-2]-'0';
// cout << endl << decode << " " << cc << " " << cfactor << " " << kk << " " << ffactor << endl;
if(cc != cfactor) {
printf("Case %d: bad C\n",++tc); continue;
}
if( kk != ffactor) {
printf("Case %d: bad K\n",++tc); continue;
}
if(cc == cfactor && kk == ffactor ){
printf("Case %d: ",++tc);
for(int i=1; i<=sz-4; i++ )printf("%c",decode[i]);
}
else printf("Case %d: bad code",++tc);
puts("");
}
return 0;
}