1 #include <iostream> 2 #include <set> 3 #include <string> 4 #include <cctype> 5 #include <sstream> 6 #include <algorithm> 7 #include <cassert> 8 9 using namespace std; 10 11 void cleanname(string &s) 12 { 13 string::iterator it; 14 15 it = remove(s.begin(), s.end(), '\''); 16 it = remove(s.begin(), it, '-'); 17 s.resize(it - s.begin()); 18 } 19 20 bool solve(int id) 21 { 22 unsigned num, maxlen; 23 string line; 24 25 cin >> num >> maxlen; 26 if (!num && !maxlen) return false; 27 28 getline(cin, line); 29 30 cout << "Case " << id << endl; 31 32 set<string> usernames; 33 for (unsigned i = 0; i < num; i++) 34 { 35 getline(cin, line); 36 istringstream iss(line); 37 38 string first, last, temp; 39 iss >> first; 40 while (iss >> temp) 41 { 42 last = temp; 43 } 44 45 cleanname(first); 46 cleanname(last); 47 48 string name; 49 bool done = false; 50 name += tolower(first[0]); 51 for (unsigned int i = 0; i < last.length() && name.length() < maxlen; 52 i++) 53 { 54 name += tolower(last[i]); 55 } 56 57 if (usernames.count(name) == 0) 58 { 59 usernames.insert(name); 60 cout << name << endl; 61 done = true; 62 } 63 64 for (int i = 1; i <= 9 && !done; i++) 65 { 66 string name2 = name; 67 if (name2.length() == maxlen) 68 { 69 name2.erase(maxlen-1); 70 } 71 name2 += (char)('0'+i); 72 73 if (usernames.count(name2) == 0) 74 { 75 usernames.insert(name2); 76 cout << name2 << endl; 77 done = true; 78 } 79 } 80 81 for (int i = 10; i <= 99 && !done; i++) 82 { 83 string name2 = name; 84 if (name2.length() == maxlen) 85 { 86 name2.erase(maxlen-1); 87 } 88 if (name2.length() == maxlen-1) 89 { 90 name2.erase(maxlen-2); 91 } 92 93 name2 += (char)('0'+ (i/10)); 94 name2 += (char)('0'+ (i%10)); 95 96 if (usernames.count(name2) == 0) 97 { 98 usernames.insert(name2); 99 cout << name2 << endl; 100 done = true; 101 } 102 } 103 104 assert(done); 105 } 106 107 108 return true; 109 } 110 111 int main() 112 { 113 int id = 1; 114 while (solve(id++)) 115 ; 116 117 return 0; 118 } 119