// [7/5/2014 Sjm]
/*
字典树,找前缀。具体求解思路同:字典树 之 hdu 1671 poj 3630
*/#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX = 2;
struct Trie{
bool Judge;
Trie* next[2];
Trie(){
Judge = false;
memset(next, NULL, sizeof(next));
}
};
Trie* Root;
bool Cre_Sea_Trie(char* str){
int Jdg1 = true, Jdg2 = false;
int len = strlen(str);
Trie* p = Root;
for (int i = 0; i < len; i++) {
int pos = str[i] - '0';
if (!(p->next[pos])) {
p->next[pos] = new Trie;
Jdg1 = false;
}
else {
if (p->next[pos]->Judge) {
Jdg2 = true;
break;
}
}
p = p->next[pos];
}
p->Judge = true;
return (Jdg1 || Jdg2);
}
void DelTrie(Trie* T) {
for (int i = 0; i < MAX; i++) {
if (T->next[i]) {
DelTrie(T->next[i]);
}
}
delete[] T;
}
int main()
{
//freopen("input.txt", "r", stdin);
char str[10][15];
int num = 0, mycount = 0;
while (~scanf("%s", str[num])) {
if (strcmp(str[num], "9") == 0) {
Root = new Trie;
mycount++;
int i;
for (i = 0; i < num; i++) {
if (Cre_Sea_Trie(str[i])) {
printf("Set %d is not immediately decodable
", mycount);
break;
}
}
if (i == num) {
printf("Set %d is immediately decodable
", mycount);
}
DelTrie(Root);
num = 0;
continue;
}
num++;
}
return 0;
}