#include <bits/stdc++.h>
using namespace std;
int censor[1234];
string decode;
vector < string > vc;
map <string , string >mp;
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;
}
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";
}
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);
}
int percent ( int n ){
return ceil( (long) (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 = "";
int once = (1 << 16) , twice = -(1 << 16) ;
for ( int i=1; i<=m; i++ ){
scanf("%d",&censor[i]);
once = ( censor[i] < once ) ? censor[i] : once;
twice = ( censor[i] > twice ) ? censor[i] : twice;
}
/// Start working from here idiot .. Start fresh
// cout << percent( ) << endl;
int range1 = once - (percent(once));
int range2 = once + (percent(once));
int ra1 = once * 2;
int par1 = twice - percent(twice);
int par2 = twice + percent(twice);
cout << ra1 << endl;
for ( int i=1; i<=m; i++ ) {
if( (censor[i]>= range1 && censor[i] <= range2) && (censor[i] < ra1)) censor[i] = 0;
else if((censor[i] >= par1) && (censor[i] <= par2) ) censor[i] = 1;
else {
printf("Case %d: bad code\n",++tc);
break;
}
//censor[i] = ( censor[i] == once ) ? 0 : 1 ;
// cout << i << " " << censor[i] << endl;
}
bool r = isReverse( m );
// for(int i=1; i<=m; i++) {
// printf("%2d",censor[i]);
// if(!(i%10))cout << endl;
// }
// cout << endl << r << " " << isRight(m) << endl;
if( (!r && !isRight(m)) ){
printf("Case %d: bad code\n",++tc);
continue;
}
int exit = 0;
if( r ){
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 ){
if( mp[s1] == ""){
printf("Case %d: bad code\n",++tc);
exit = 1;
break;
}
decode += (mp[s1]) ;
s1 = "";
}
else s1 += (censor[i]+'0');
}
if( mp[s1] == "" && !exit){
printf("Case %d: bad code\n",++tc);
exit = 1;
break;
}
decode += (mp[s1]) ;
s1 = "";
}
else {
for ( int i=6; i<=m; i+=6){
censor[i] = 5;
}
string s1 = "";
for(int i=1; i<=m; i++ ){
if(censor[i] > 1 ){
if( mp[s1] == ""){
printf("Case %d: bad code\n",++tc);
exit = 1;
break;
}
// cout << "s = " << mp[s1] << endl;
decode += (mp[s1]) ;
s1 = "";
}
else s1 += (censor[i]+'0');
}
if( mp[s1] == "" && !exit){
printf("Case %d: bad code\n",++tc);
exit = 1;
break;
}
decode += (mp[s1]) ;
// cout << "s = " << mp[s1] << endl;
s1 = "";
}
if(exit)continue;
int sz = decode.size();
// cout << decode[0] << decode[sz-1] << endl;
// cout << "fuck" << endl;
//cout << sz << endl;
int cc = gen_c( sz-4);
int ck = (decode[sz-3]-'0');
int kk ;
// cout << cc << endl;
if(decode[0] != 'S' || decode[sz-1] != 'S' || sz <= 4){
printf("Case %d: bad code\n",++tc); continue;
}
if( cc == ck || ( cc==10 && decode[sz-3] == '-')){
kk = gen_k(( sz-4),cc );
if(kk == (decode[sz-2] - '0') || (kk == 10 && decode[sz-2] == '-')){
printf("Case %d: ",++tc);
for(int i=1; i<=sz-4; i++){
if(decode[i] != 'S')
printf("%c",decode[i]);
}
puts("");
}
else printf("Case %d: bad K\n",++tc);
}
else printf("Case %d: bad C\n",++tc);
// cout << endl << decode << " " << cc << " " << kk << " " << endl;
decode = "";
}
return 0;
}