#define _CRT_SECURE_NO_WARNINGS #define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING #ifdef ONLINE_JUDGE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef long long int64_t; typedef unsigned long long uint64_t; #else #include #endif using namespace std; #define CRP(t, x) const t &x #define OPX(op, t, x) operator op(CRP(t, x)) #define OPL(t, x) bool OPX(<, t, x) const #define FIL(x, v) memset(x, v, sizeof(x)) #define CLR(x) FIL(x, 0) #define NE1(x) FIL(x, -1) #define INF(x) FIL(x, 0x3f) #ifndef _DEBUG #define _DEBUG 0 #endif // !_DEBUG #define IFD if (_DEBUG) typedef int64_t ll, i64; typedef uint64_t ull, u64; inline char getchar(int) { static char buf[64 << 20], *S = buf, *T = buf; if (S == T) T = fread(S = buf, 1, 64 << 20, stdin) + buf; return S == T ? EOF : *S++; } template inline bool read(T &x) { int ch = x = 0, f = 1; while (!isdigit(ch = getchar())) if (ch == EOF) return false; else if (ch == '-') f = 0; for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0'; return x = f ? x : -x, true; } template inline bool read(T1 &v1, T2 &v2) { return read(v1) && read(v2); } template inline bool read(T1 &v1, T2 &v2, T3 &v3) { return read(v1) && read(v2) && read(v3); } template inline bool read(T1 &v1, T2 &v2, T3 &v3, T4 &v4) { return read(v1) && read(v2) && read(v3) && read(v4); } template inline bool read(T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5) { return read(v1) && read(v2) && read(v3) && read(v4) && read(v5); } inline ll gcd(ll a, ll b) { for (; b; swap(a, b)) a %= b; return a; } inline ll fpow(ll a, ll b, ll m) { ll r = 1; for (; b; b >>= 1, a = a * a % m) if (b & 1) r = r * a % m; return r; } const double eps = 1e-8; inline int sgn(double x) { return x > eps ? 1 : x < -eps ? -1 : 0; } char dict[10050][19], buf[19]; int dict_size, len[10050]; int main() { for (;; dict_size++) { scanf("%s", dict[dict_size]); len[dict_size] = strlen(dict[dict_size]); if (len[dict_size] == 1 && *dict[dict_size] == '#') break; } vector ans; while (~scanf("%s", buf)) { ans.clear(); int n = strlen(buf); if (n == 1 && *buf == '#') break; bool flag = false; for (int i = 0; i < dict_size && !flag; i++) { if (len[i] == n - 1) { bool fl1 = true, fl2 = true; for (int j = 0, k = 0; j < n - 1 && k < n; j++, k++) { if (dict[i][j] != buf[k] && fl2) fl2 = false, k++; if (dict[i][j] != buf[k]) fl1 = false; } if (fl1) ans.push_back(i); } if (len[i] == n) { int difcnt = 0; for (int j = 0; j < n; j++) if (buf[j] != dict[i][j]) difcnt++; if (difcnt == 0) flag = true; if (difcnt == 1) ans.push_back(i); } if (len[i] == n + 1) { bool fl1 = true, fl2 = true; for (int j = 0, k = 0; j < n + 1 && k < n; j++, k++) { if (dict[i][j] != buf[k] && fl2) fl2 = false, j++; if (dict[i][j] != buf[k]) fl1 = false; } if (fl1) ans.push_back(i); } } printf("%s", buf); if (flag) puts(" is correct"); else { printf(":"); for (int i = 0; i < ans.size(); i++) printf(" %s", dict[ans[i]]); putchar('\n'); } } return 0; }