/*
* =====================================================================================
*
* Filename: 1035.cpp
*
* Description:
*
* Version: 1.0
* Created: 06/02/2013 12:22:45 PM
* Revision: none
* Compiler: gcc
*
* Author: wd (wd), bowskeleton@126.com
* Company: bnrc608
*
* =====================================================================================
*/
#include <iostream>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
#define SIZE 1000
int N;
int words = 0;
char dictionary[10001][16];
int len[10001];
queue<int>q;
void Input ()
{
char tmp[16];
while(cin>>tmp){
if(tmp[0]=='#')
break;
strcpy(dictionary[words],tmp);
len[words] = strlen(tmp);
words++;
}
} /* ----- end of function Input ----- */
bool check_d(const char * w1, const char * w2, int len){
const char *tmp = w1;
bool del = false;
for(int i=0;i<len-1;i++){
if(tmp[i]!=w2[i]){
if(!del){
tmp++;
i--;
del = true;
}
else
return false;
}
}
return true;
}
void check(char * word){
int lens=strlen(word);
while(!q.empty()) q.pop();
for(int i=0;i<words;i++){
if(lens>len[i]+1||lens<len[i]-1){
continue;
}
else if(lens==len[i]){
int counter=0;
for(int j=0;j<lens&&counter<2;j++){
if(word[j]!=dictionary[i][j]){
counter++;
}
}
if(counter==0){
cout << word << " is correct" << endl;
return ;
}
if(counter==1){
q.push(i);
}
}
else{
bool can = false;
if(lens==len[i]+1){
can = check_d(word, dictionary[i],lens);
}
else {
can = check_d(dictionary[i], word, lens+1);
}
if(can) q.push(i);
}
}
cout << word << ":";
while(!q.empty()){
int index = q.front();
cout << " " << dictionary[index];
q.pop();
}
cout << endl;
}
void Solve ()
{
char tmp[16];
while(cin>>tmp && tmp[0]!='#'){
check(tmp);
}
} /* ----- end of function Solve ----- */
int main ()
{
Input();
Solve();
return 0;
} /* ---------- end of function main ---------- */
* =====================================================================================
*
* Filename: 1035.cpp
*
* Description:
*
* Version: 1.0
* Created: 06/02/2013 12:22:45 PM
* Revision: none
* Compiler: gcc
*
* Author: wd (wd), bowskeleton@126.com
* Company: bnrc608
*
* =====================================================================================
*/
#include <iostream>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
#define SIZE 1000
int N;
int words = 0;
char dictionary[10001][16];
int len[10001];
queue<int>q;
void Input ()
{
char tmp[16];
while(cin>>tmp){
if(tmp[0]=='#')
break;
strcpy(dictionary[words],tmp);
len[words] = strlen(tmp);
words++;
}
} /* ----- end of function Input ----- */
bool check_d(const char * w1, const char * w2, int len){
const char *tmp = w1;
bool del = false;
for(int i=0;i<len-1;i++){
if(tmp[i]!=w2[i]){
if(!del){
tmp++;
i--;
del = true;
}
else
return false;
}
}
return true;
}
void check(char * word){
int lens=strlen(word);
while(!q.empty()) q.pop();
for(int i=0;i<words;i++){
if(lens>len[i]+1||lens<len[i]-1){
continue;
}
else if(lens==len[i]){
int counter=0;
for(int j=0;j<lens&&counter<2;j++){
if(word[j]!=dictionary[i][j]){
counter++;
}
}
if(counter==0){
cout << word << " is correct" << endl;
return ;
}
if(counter==1){
q.push(i);
}
}
else{
bool can = false;
if(lens==len[i]+1){
can = check_d(word, dictionary[i],lens);
}
else {
can = check_d(dictionary[i], word, lens+1);
}
if(can) q.push(i);
}
}
cout << word << ":";
while(!q.empty()){
int index = q.front();
cout << " " << dictionary[index];
q.pop();
}
cout << endl;
}
void Solve ()
{
char tmp[16];
while(cin>>tmp && tmp[0]!='#'){
check(tmp);
}
} /* ----- end of function Solve ----- */
int main ()
{
Input();
Solve();
return 0;
} /* ---------- end of function main ---------- */