#include #define MAXD 10240 #define MAXW 64 #define MAXL 20 char dict[MAXD][MAXL]; char word[MAXL]; int isrep (const char* p1, const char* p2) { int dif = 0; for ( ; *p1 != '\0' && *p2 != '\0'; ++p1, ++p2 ) if ( *p1 != *p2 ) if ( dif++ ) return 0; return *p1 == *p2; } int isdel (const char* p1, const char* p2) { int dif = 0; for ( ; *p1 != '\0' && *p2 != '\0'; ++p1, ++p2 ) if ( *p1 != *p2 ) { --p2; if ( dif++ ) return 0; } if (dif && (*p1 == *p2)) return 1; return (!dif && *p2 == '\0' && p1[1] == '\0'); } int isins (const char* p1, const char* p2) { return isdel (p2, p1); } int main (void) { int i, dc, ex; for ( ; ; ) { for ( dc = 0; ; ++dc ) { scanf ("%s", dict[dc]); if ( dict[dc][0] == '#' ) break; } if ( dc == 0 ) break; for ( ; ; ) { scanf ("%s", word); if ( word[0] == '#' ) break; for ( i = ex = 0; i < dc && !ex; ++i ) if ( strcmp (word, dict[i]) == 0 ) ex = 1; if ( ex ) { printf ("%s is correct\n", word); continue; } printf ("%s:", word); for ( i = 0; i < dc; ++i ) if ( isdel (dict[i], word) || isins (dict[i], word) || isrep (dict[i], word) ) printf (" %s", dict[i]); printf ("\n"); } } return 0; }