输入包含多组数据。
每组数据第一行包含一个正整数n(1≤n≤1024)。
紧接着n行,每行包含一个电话号码,电话号码仅由连字符“-”、数字和大写字母组成。
没有连续出现的连字符,并且排除连字符后长度始终为7(美国电话号码只有7位)。
对应每一组输入,按照字典顺序输出不重复的标准数字形式电话号码,即“xxx-xxxx”形式。
每个电话号码占一行,每组数据之后输出一个空行作为间隔符。
12 4873279 ITS-EASY 888-4567 3-10-10-10 888-GLOP TUT-GLOP 967-11-11 310-GINO F101010 888-1200 -4-8-7-3-2-7-9- 487-3279 4 UTT-HELP TUT-GLOP 310-GINO 000-1213
310-1010 310-4466 487-3279 888-1200 888-4567 967-1111 000-1213 310-4466 888-4357 888-4567
import java.util.*; public class Main{ public static void main(String[] args){ String symbol="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; String number="222333444555666777788899991234567890"; Scanner scanner=new Scanner(System.in); while(scanner.hasNext()){ int n=scanner.nextInt(); ArrayList<String> arrayList=new ArrayList<String>(); for(int i=0;i<n;i++){ String str=scanner.next(); str=str.replace("-",""); String result=""; for(int j=0;j<7;j++){ result+=number.charAt(symbol.indexOf(str.charAt(j)+"")); } result=result.substring(0,3)+"-"+result.substring(3,7); if(!arrayList.contains(result)) arrayList.add(result); } Collections.sort(arrayList); for(int j=0;j<arrayList.size();j++){ System.out.println(arrayList.get(j)); } System.out.println(); } } }
#include<iostream> #include<vector> #include<string> #include<algorithm> #include<functional> #include <map> #include <set> #include <unordered_set> #include <unordered_map> #include <exception> #include <iomanip> #include <memory> #include <sstream> #define INF 1000000 using namespace std; int main(int argc, char** argv) { //freopen("in.txt", "r", stdin); unordered_map<char, char> dic; dic.emplace('A', '2'); dic.emplace('B', '2'); dic.emplace('C', '2'); dic.emplace('D', '3'); dic.emplace('E', '3'); dic.emplace('F', '3'); dic.emplace('G', '4'); dic.emplace('H', '4'); dic.emplace('I', '4'); dic.emplace('J', '5'); dic.emplace('K', '5'); dic.emplace('L', '5'); dic.emplace('M', '6'); dic.emplace('N', '6'); dic.emplace('O', '6'); dic.emplace('P', '7'); dic.emplace('Q', '7'); dic.emplace('R', '7'); dic.emplace('S', '7'); dic.emplace('T', '8'); dic.emplace('U', '8'); dic.emplace('V', '8'); dic.emplace('W', '9'); dic.emplace('X', '9'); dic.emplace('Y', '9'); dic.emplace('Z', '9'); int n; while (cin >> n && n > 0) { set<string> hs; string s; for (int i = 0; i < n; ++i) { cin >> s; string p = ""; for (auto& c : s) { if (isdigit(c)) p += c; else if (isupper(c)) p += dic[c]; } if (p.size() != 7) continue; p = p.substr(0, 3) + "-" + p.substr(3); hs.emplace(p); } for (auto& phone : hs) cout << phone << endl; cout << endl; } return 0; }
// 借助 hash 表完成字母和数字之间的转换即可. 注意处理大小写的情况. #include <iostream> #include <vector> #include <string> #include <algorithm> #include <functional> #include <map> #include <set> #include <unordered_set> #include <unordered_map> #include <exception> #include <iomanip> #include <memory> #include <sstream> #define INF 1000000 using namespace std; int main(int argc, char** argv) { unordered_map<char, char> dic; dic.emplace('A', '2'); dic.emplace('B', '2'); dic.emplace('C', '2'); dic.emplace('D', '3'); dic.emplace('E', '3'); dic.emplace('F', '3'); dic.emplace('G', '4'); dic.emplace('H', '4'); dic.emplace('I', '4'); dic.emplace('J', '5'); dic.emplace('K', '5'); dic.emplace('L', '5'); dic.emplace('M', '6'); dic.emplace('N', '6'); dic.emplace('O', '6'); dic.emplace('P', '7'); dic.emplace('Q', '7'); dic.emplace('R', '7'); dic.emplace('S', '7'); dic.emplace('T', '8'); dic.emplace('U', '8'); dic.emplace('V', '8'); dic.emplace('W', '9'); dic.emplace('X', '9'); dic.emplace('Y', '9'); dic.emplace('Z', '9'); int n; while (cin >> n && n > 0) { set<string> hs; string s; for (int i = 0; i < n; ++i) { cin >> s; string p = ""; for (auto& c : s) { if (isdigit(c)){ p += c; } else if (isupper(c)) { p += dic[c]; } } if (p.size() != 7){ continue; } p = p.substr(0, 3) + "-" + p.substr(3); hs.emplace(p); } for (auto& phone : hs) { cout << phone << endl; } cout << endl; } return 0; }
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] map = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "22233344455566677778889999"}; while (sc.hasNext()) { int n = sc.nextInt(); Set<String> set = new TreeSet<>(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < n; i ++ ) { char[] ch = sc.next().replace("-", "").toCharArray(); for (int j = 0; j < ch.length; j ++ ) { if(j == 3) sb.append("-"); if(Character.isLetter(ch[j])) sb.append(map[1].charAt(map[0].indexOf(ch[j]))); else sb.append(ch[j]); } set.add(sb.toString()); sb.delete(0, sb.length()); } for (String s:set) System.out.println(s); System.out.println(); } } }
#include<string> #include<iostream> #include<map> #include<vector> #include<algorithm> #include<set> using namespace std; //删除字符串中指定的字符 string removeCaracterInString(string s,char rs){ int len = s.size(); string res; for(int i=0;i<len;i++){ if(s[i]==rs) continue; res += s[i]; } return res; } int main(){ int n; map<char,char> phoneMap; phoneMap['A'] = '2'; phoneMap['B'] = '2'; phoneMap['C'] = '2'; phoneMap['D'] = '3'; phoneMap['E'] = '3'; phoneMap['F'] = '3'; phoneMap['G'] = '4'; phoneMap['H'] = '4'; phoneMap['I'] = '4'; phoneMap['J'] = '5'; phoneMap['K'] = '5'; phoneMap['L'] = '5'; phoneMap['M'] = '6'; phoneMap['N'] = '6'; phoneMap['O'] = '6'; phoneMap['P'] = '7'; phoneMap['Q'] = '7'; phoneMap['R'] = '7'; phoneMap['S'] = '7'; phoneMap['T'] = '8'; phoneMap['U'] = '8'; phoneMap['V'] = '8'; phoneMap['W'] = '9'; phoneMap['X'] = '9'; phoneMap['Y'] = '9'; phoneMap['Z'] = '9'; while(cin>>n){ //方式一:利用vector容器实现 /* vector<string> res; for(int i=0;i<n;i++){ string telephoneN; cin>>telephoneN; telephoneN = removeCaracterInString(telephoneN,'-'); int len = telephoneN.size(); for(int j=0;j<len;j++){ if(telephoneN[j]>='A'){ telephoneN[j] = phoneMap[telephoneN[j]]; } } telephoneN.insert(telephoneN.begin()+3,'-'); res.push_back(telephoneN); } sort(res.begin(),res.end()); res.erase(unique(res.begin(),res.end()),res.end()); int res_len = res.size(); for(int i=0;i<res_len;i++){ cout<<res[i]<<endl; } /* int res_len = res.size(); string last; for(int i=0;i<res_len;i++){ if(res[i]==last)continue; last = res[i]; cout<<res[i]<<endl; } cout<<endl; */ //方式二:由题意可知,最终结果需要有序且不重复,这一点很符合set容器的特点 set<string,less<string>> res; for(int i=0;i<n;i++){ string telephoneN; cin>>telephoneN; telephoneN = removeCaracterInString(telephoneN,'-'); int len = telephoneN.size(); for(int j=0;j<len;j++){ if(telephoneN[j]>='A'){ telephoneN[j] = phoneMap[telephoneN[j]]; } } telephoneN.insert(telephoneN.begin()+3,'-'); res.insert(telephoneN); } set<string,less<string>>::iterator it; for(it=res.begin();it!=res.end();it++){ cout<<*it<<endl; } cout<<endl; } return 0; }
#include <iostream> #include <string> #include <set> using namespace std; int main() { int n; string mapper[2] = { "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "22233344455566677778889999" }; while (cin >> n && n) { string str, temp; set<string, less<string> > list; for (int i = 0; i < n; ++i) { cin >> str; temp = ""; for (char ch : str) { if (ch != '-' && isalpha(ch)) temp += mapper[1][toupper(ch) - 'A']; else if (ch != '-' && isalnum(ch)) temp += ch; } temp.insert(temp.begin() + 3, '-'); list.insert(temp); } for (string str : list) cout << str << endl; cout << endl; } return 0; }
#include<iostream> #include<string> #include<set> using namespace std; int main() { string s; int length; string NUM = "22233344455566677778889999"; while (cin >> length) { set<string> data; int cnt; for (int i = 0; i < length; i++) { cnt = 0; string res; cin >> s; for (int j = 0; j < s.length(); j++) { if (s[j] >= 'A'&&s[j] <= 'Z') { res += NUM[s[j] - 'A']; cnt++; if (cnt == 3) res += "-"; } else if (s[j] >= '0'&&s[j] <= '9') { res += s[j]; cnt++; if (cnt == 3) res += "-"; } } data.insert(res); } for (set<string>::iterator it = data.begin(); it != data.end(); it++) cout << *it << endl; cout << endl; } return 0; }
import java.util.*; public class Main { private static boolean isLettersOrNumbers(char c) { if ((c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122)) { return true; } return false; } private static char transform(char c) { if (c >= 48 && c <= 57) { return c; } else { if (c == 'A' || c == 'B' || c == 'C') { return '2'; } else if (c == 'D' || c == 'E' || c == 'F') { return '3'; } else if (c == 'G' || c == 'H' || c == 'I') { return '4'; } else if (c == 'J' || c == 'K' || c == 'L') { return '5'; } else if (c == 'M' || c == 'N' || c == 'O') { return '6'; } else if (c == 'P' || c == 'Q' || c == 'R' || c == 'S') { return '7'; } else if (c == 'T' || c == 'U' || c == 'V') { return '8'; } else if (c == 'W' || c == 'X' || c == 'Y' || c == 'Z') { return '9'; } else { return 0; } } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNextLine()) { int n = Integer.parseInt(scanner.nextLine()); String[] strings = new String[n]; int index = 0; for (int i = 0; i < n; i++) { String str1 = scanner.nextLine(); char[] ch1 = str1.toCharArray(); String str2 = ""; int count = 0; for (char c : ch1) { if (isLettersOrNumbers(c)) { if (count == 3) { str2 += "-"; count++; } str2 += transform(c); count++; } } strings[index] = str2; index++; } Arrays.sort(strings); ArrayList<String>list = new ArrayList<>(); for (int i = 0; i < strings.length; i++) { if (!list.contains(strings[i])) { list.add(strings[i]); } } for (String str : list) { System.out.println(str); } System.out.println(); } } }
import java.util.*; public class Main{ public static void main(String... args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ Set<String> set = new TreeSet<>(); int n = sc.nextInt(); for(int i = 0;i < n;i++){ String str = sc.next(); set.add(change(str)); } for(String str : set){ System.out.println(str); } System.out.println(); } } private static String change(String str){ StringBuilder sb = new StringBuilder(); int ln = str.length(); int count = 0; for(int i = 0;i < ln;i++){ char ch = str.charAt(i); if(count == 3){ sb.append('-'); count++; } if(ch >= 'A' && ch <= 'Z'){ int num = (ch - 'A') / 3 + 2; if(ch == 'S' || ch == 'V' || ch >= 'Y'){ num -= 1; } sb.append(num); count++; }else if(ch >= '0' && ch <= '9'){ sb.append(ch); count++; } } return sb.toString(); } }
import java.util.*; import java.io.*; public class Main{ //是否是数字 public static boolean isDigit(char s){ return (s >= '0' && s <= '9'); } //是否是大写 public static boolean isUpper(char s){ return (s >= 'A' && s <= 'Z'); } public static void main(String[] args) throws Exception{ Map<Character,Character> map = new HashMap<>(); String alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String num = "22233344455566677778889999"; char[] alphach = alpha.toCharArray(); char[] numch = num.toCharArray(); for(int i = 0;i < alphach.length;i++){ map.put(alphach[i],numch[i]); } Set<String> set = new TreeSet<>(); String line; BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); while((line = bf.readLine()) != null){ set.clear(); int n = Integer.parseInt(line); for(int i = 0;i < n;i++){ line = bf.readLine(); char[] linech = line.toCharArray(); StringBuilder sb = new StringBuilder(); for(char ch : linech){ if(isDigit(ch)){ sb.append(ch); }else if(isUpper(ch)){ sb.append(map.get(ch)); } } line = sb.substring(0,3) + "-" + sb.substring(3); set.add(line); } for(String s : set){ System.out.println(s); } //处理下一组数据和上一组数据之间有一个空格 System.out.println(); } } }
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class Main { public static char change(char c){ if (c=='A'||c=='B'||c=='C'){ return '2'; } if (c=='D'||c=='E'||c=='F'){ return '3'; } if (c=='G'||c=='H'||c=='I'){ return '4'; } if (c=='J'||c=='K'||c=='L'){ return '5'; } if (c=='M'||c=='N'||c=='O'){ return '6'; } if (c=='P'||c=='Q'||c=='R'||c=='S'){ return '7'; } if (c=='T'||c=='U'||c=='V'){ return '8'; } if (c=='W'||c=='X'||c=='Y'||c=='Z'){ return '9'; } return c; } public static void main(String[] args) { Scanner sc=new Scanner(System.in); while (sc.hasNext()){ int n=sc.nextInt(); List<String> list=new ArrayList<>(); for (int i = 0; i < n; i++) { String str=sc.next(); String s=""; str=str.replace("-",""); int count=0; for (int j = 0; j < 7; j++) { count++; s += change(str.charAt(j)); if (count == 3){ s += "-"; } } if (!list.contains(s)) { list.add(s); } } Collections.sort(list); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } System.out.println(); } } }
/*有的人相爱,有的人夜里开车看海,有的人牛客题目一做一下午*/ import java.util.*; public class Main { static Map<Integer, String> map1 = new HashMap<Integer, String>() {{put(2, "ABC"); put(3, "DEF"); put(4, "GHI"); put(5, "JKL"); put(6, "MNO"); put(7, "PQRS"); put(8, "TUV"); put(9, "WXYZ");}}; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { int n = scanner.nextInt(); String[] strs = new String[n]; Set<String> set = new HashSet<>(); StringBuffer sb = new StringBuffer(); for(int i = 0; i < n; i ++) { strs[i] = scanner.next(); } for(String str : strs) { find(str, sb); set.add(sb.toString()); sb.delete(0, sb.length()); } String[] results = set.toArray(new String[set.size()]); Arrays.sort(results); for(String result : results) { System.out.println(result); } System.out.println(); } } public static void find(String str, StringBuffer sb) { int len = 0; for(int i = 0; i < str.length(); i ++) { char ch = str.charAt(i); String strCh = ch+""; if(ch >= '0' && ch <= '9') { sb.append(len == 3 ? "-"+strCh : strCh); len ++; continue; } for(int j = 2; j <= 9; j ++) { String word = map1.get(j); if(word.contains(strCh)) { sb.append(len == 3 ? "-"+j : j+""); len++; break; } } } } }
#include <iostream> #include <set> #include <string> using namespace std; char converse(char ch) { if(ch=='A' || ch=='B' ||ch=='C') return '2'; else if(ch=='D' || ch=='E' ||ch=='F') return '3'; else if(ch=='G' || ch=='H' ||ch=='I') return '4'; else if(ch=='J' || ch=='K' ||ch=='L') return '5'; else if(ch=='M' || ch=='N' ||ch=='O') return '6'; else if(ch=='P' || ch=='Q' ||ch=='R' || ch=='S') return '7'; else if(ch=='T' || ch=='U' ||ch=='V') return '8'; else return '9'; } int main() { int n=0; while(cin >> n) { set<string> ret; while(n--) { string receive;//一个号码 cin>>receive; int left=0;//保证连字符左面是三个 int start=0; string temp;//转换临时保存 while(left<3)//扫描连字符左面,去除多余连字符 { if(receive[start] >= '0' && receive[start]<='9' || receive[start]>='A' && receive[start]<='Z') { if(receive[start] >= '0' && receive[start]<='9') { temp+=receive[start]; } else { temp+=converse(receive[start]); } start++; left++; } else { start++; } } temp+='-'; int right=0; while(right<4)//同理,右面也是一样 { if(receive[start] >= '0' && receive[start]<='9' || receive[start]>='A' && receive[start]<='Z') { if(receive[start] >= '0' && receive[start]<='9') { temp+=receive[start]; } else { temp+=converse(receive[start]); } start++; right++; } else { start++; } } ret.insert(temp); } for(auto e: ret)//set容器技能去重,也能排序 { cout<<e<<endl; } cout<<endl; } return 0; }
import java.util.*; public class Main { public static List<Character> l2= Arrays.asList('A','B','C'); public static List<Character> l3= Arrays.asList('D','E','F'); public static List<Character> l4= Arrays.asList('G','H','I'); public static List<Character> l5= Arrays.asList('J','K','L'); public static List<Character> l6= Arrays.asList('M','N','O'); public static List<Character> l7= Arrays.asList('P','Q','R','S'); public static List<Character> l8= Arrays.asList('T','V','U'); public static List<Character> l9= Arrays.asList('W','X','Y','Z'); public static void main(String[] args) { Scanner sc=new Scanner(System.in); while (sc.hasNext()){ int n=sc.nextInt(); String[] inp = new String[n]; for (int i = 0; i < n; i++) { inp[i]=sc.next().replace("-",""); } spiltStr(inp); System.out.println(); } } private static void spiltStr(String[] inp) { char[] c=new char[8]; String s; ArrayList<String > a =new ArrayList<>(); for (int i = 0; i < inp.length; i++) { c=inp[i].toCharArray(); s=getNumber(c); if (!a.contains(s)){ a.add(s); } } Collections.sort(a); for (String str:a) { System.out.println(str); } } private static String getNumber(char[] c) { StringBuilder sb=new StringBuilder(); for (int i = 0; i < c.length; i++) { if (i==3){ sb.append('-'); } if (l2.contains(c[i])){ sb.append("2"); }else if (l3.contains(c[i])){ sb.append("3"); }else if (l4.contains(c[i])){ sb.append("4"); }else if (l5.contains(c[i])){ sb.append("5"); }else if (l6.contains(c[i])){ sb.append("6"); }else if (l7.contains(c[i])){ sb.append("7"); }else if (l8.contains(c[i])){ sb.append("8"); }else if (l9.contains(c[i])){ sb.append("9"); }else { sb.append(c[i]); } } return sb.toString(); } }
/* 1.用数组存a-z对应的数字 2.记得用set来装答案 3.每组用例输出完得换行 */ #include<iostream> #include<cstdio> #include<string> #include<set> #include<cctype> #include<algorithm> using namespace std; int main(){ int arr[256] = { 0 }; for (int i = 'P'; i <= 'S'; ++i){ arr[i] = 7; } for (int i = 'W'; i <= 'Z'; ++i){ arr[i] = 9; } int j = 'A'; for (int i = 2; i <= 8; ++i){ if (i == 7){ j += 4; } else{ int tmp = j + 2; for (j; j <= tmp; ++j){ arr[j] = i; } } } int n = 0; while (cin >> n){ set<string> res; string c_name; string tmp1; for (int i = 0; i < n; ++i) { cin >> c_name; int len = c_name.size(); for (int i = 0; i < len; ++i){ if (tmp1.size() == 3){ tmp1 += '-'; } if (c_name[i] >= '0'&&c_name[i] <= '9'){ tmp1 += c_name[i]; } else if (c_name[i] == '-'){ continue; } else{ //字母 //本题不区分大小写 可以忽略这个if语句 if (c_name[i] >= 'a'&&c_name[i] <= 'z'){ c_name[i] = toupper(c_name[i]); } tmp1 += to_string(arr[c_name[i]]); } } res.insert(tmp1); tmp1.clear(); } auto it = res.begin(); while (it != res.end()){ cout << *it << endl; ++it; } cout << endl; } return 0; }
import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); while(scanner.hasNext()){ ArrayList<String> arrayList=new ArrayList<>(); int n=scanner.nextInt(); String [] str=new String[n]; for (int i = 0; i <str.length ; i++) { str[i]=scanner.next(); String ret=toCoverse(str[i]).toString(); ret=ret.substring(0,3) +"-"+ret.substring(3,7); if(!arrayList.contains(ret)){ arrayList.add(ret); } } Collections.sort(arrayList); for (int i = 0; i <arrayList.size() ; i++) { System.out.println(arrayList.get(i)); } scanner.nextLine(); } } public static StringBuilder toCoverse(String s) { StringBuilder list=new StringBuilder(); char []ch=s.toCharArray(); for (int i = 0; i <ch.length ; i++) { if(ch[i]>='0'&&ch[i]<='9'){ list.append(ch[i]); } if(ch[i]>='A'&&ch[i]<='B'){ list.append('2'); } if(ch[i]>='D'&&ch[i]<='F'){ list.append('3'); } if(ch[i]>='G'&&ch[i]<='I'){ list.append('4'); } if(ch[i]>='J'&&ch[i]<='L'){ list.append('5'); } if(ch[i]>='M'&&ch[i]<='O'){ list.append('6'); } if(ch[i]>='P'&&ch[i]<='S'){ list.append('7'); } if(ch[i]>='T'&&ch[i]<='V'){ list.append('8'); } if(ch[i]>='W'&&ch[i]<='Z'){ list.append('9'); } } return list; } }
#define _CRT_SECURE_NO_WARNINGS 1 (2679)#include<iostream> #include<string> (765)#include<vector> #include<map> using namespace std; bool isTrue(string str) { int count = 0; for (int i = 0; i < str.size(); ++i) { if ((str[i] >= '0' && str[i] <= '9') || (str[i] >= 'A' && str[i] <= 'Z')) { count++; continue; } else if (str[i] == '-') continue; else return false; } if (count == 7) return true; else return false; } void NumDesk(string& tmp) { for (int i = 0; i < tmp.size(); ++i) { if (tmp[i] == '-') { tmp.erase(tmp.begin()+i); --i; } else { if (tmp[i] >= 'A' && tmp[i] <= 'C') tmp[i] = '2'; if (tmp[i] >= 'D' && tmp[i] <= 'F') tmp[i] = '3'; if (tmp[i] >= 'G' && tmp[i] <= 'I') tmp[i] = '4'; if (tmp[i] >= 'J' && tmp[i] <= 'L') tmp[i] = '5'; if (tmp[i] >= 'M' && tmp[i] <= 'O') tmp[i] = '6'; if (tmp[i] >= 'P' && tmp[i] <= 'S') tmp[i] = '7'; if (tmp[i] >= 'T' && tmp[i] <= 'V') tmp[i] = '8'; if (tmp[i] >= 'W' && tmp[i] <= 'Z') tmp[i] = '9'; } } tmp.insert(tmp.begin() + 3, '-'); } int main() { int n = 0; while (cin >> n) { vector<string> str(n); for (int i = 0; i < str.size(); ++i) cin >> str[i]; map<string, int> arr; for (int i = 0; i < str.size(); ++i) { if (isTrue(str[i])) { NumDesk(str[i]); arr.insert(make_pair(str[i],0)); } } auto it = arr.begin(); while (it != arr.end()) { cout << it->first << endl; ++it; } cout << endl; } return 0; }
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ; import java.util.Comparator; import java.util.Scanner; import java.util.Set; import java.util.TreeSet; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); Set<String> set=new TreeSet<>(new Comparator<String>() { @Override public int compare(String o1, String o2) { return Integer.parseInt(o1)-Integer.parseInt(o2); } }); while (in.hasNextLine()){ int count=in.nextInt(); while (count>=0) { String str = in.nextLine(); String result=doAction(str); if (result!=null) { set.add(result); } count--; } for (String s : set) { System.out.println(s.substring(0, 3) + "-" + s.substring(3)); } System.out.println(); set.clear(); } } private static String doAction(String str) { if ( !check(str)){ return null; } String result=""; String newstr=str.replaceAll("-",""); for (int i=0;i<7;i++){ String c=newstr.substring(i,i+1); result+=CL(c); } return result; } private static String CL(String c) { if (c.matches("[0-9]")){ return c; }else { if (c.matches("[A-O]")) { return String.valueOf((c.charAt(0)-'A')/3+2); } if (c.matches("[P-S]")){ return "7"; } if (c.matches("[T-V]")){ return "8"; } if (c.matches("[W-Z]")){ return "9"; } } return null; } private static boolean check(String str) { int num=0; String[] arr=str.split("-"); for (String s:arr){ num+=s.length(); } if (num==7){ return true; } return false; } }
table = {k: v for i in [dict.fromkeys('ABC',2), dict.fromkeys('DEF',3), dict.fromkeys('GHI',4), dict.fromkeys('JKL',5), dict.fromkeys('MNO',6), dict.fromkeys('PRQS',7) , dict.fromkeys('TUV',8), dict.fromkeys('WXYZ',9)] for k, v in i.items()} def transform(x): x = ''.join(x.split('-')) result = '' for char in x: if char in table: result += str(table[char]) else: result += char result = result[:3] + '-' + result[3:] return result try: while 1: contact = [] for j in xrange(input()): contact.append(transform(raw_input())) result = sorted(set(contact)) for w in result: print w print '' except: pass