1 #include <iostream> 2 #include <sstream> 3 #include <string> 4 #include <algorithm> 5 #include <vector> 6 #include <map> 7 using namespace std; 8 9 #define GI ({int _t; scanf("%d", &_t); _t;}) 10 #define FOR(i, a, b) for (int i=a; i<b; i++) 11 #define REP(i, a) FOR(i, 0, a) 12 template<class T> string toString(T n){ostringstream ost;ost<<n;ost.flush();return ost.str();} 13 int toInt(string s){int r=0;istringstream sin(s);sin>>r;return r;} 14 #define DBG(x) cout << #x << "::" << x << endl; 15 #define DBGV(_v) { REP(_i, _v.size()) { cout << _v[_i] << "\t";} cout << endl;} 16 17 string tens(int digit) { 18 string res = ""; 19 if (digit <= 3) { 20 REP(i, digit) res += "x"; 21 return res; 22 } 23 if (digit >= 4 && digit <= 8) { 24 FOR(i, digit, 5) res += "x"; 25 res += "l"; 26 FOR(i, 5, digit) res += "x"; 27 return res; 28 } 29 if (digit == 9) return "xc"; 30 } 31 32 string units(int digit) { 33 string res = ""; 34 if (digit <= 3) { 35 REP(i, digit) res += "i"; 36 return res; 37 } 38 if (digit >= 4 && digit <= 8) { 39 FOR(i, digit, 5) res += "i"; 40 res += "v"; 41 FOR(i, 5, digit) res += "i"; 42 return res; 43 } 44 if (digit == 9) return "ix"; 45 } 46 47 string decimaltoroman(int num) { 48 //Works till 100; 49 string res = ""; 50 if (num == 100) return "c"; 51 int u = num%10, t = num/10; 52 if (tens > 0) { 53 return tens(t) + units(u); 54 } 55 else { 56 return units(u); 57 } 58 59 } 60 61 int main() { 62 int num; 63 while (scanf ("%d", &num) != -1 && num != 0) { 64 map <char, int> res; 65 FOR(i, 1, num+1) { 66 string t = decimaltoroman(i); 67 REP(j, t.size()) { 68 res[t[j]]++; 69 } 70 } 71 printf("%d: %d i, %d v, %d x, %d l, %d c\n", num, res['i'], res['v'], res['x'], res['l'], res['c']); 72 } 73 return 0; 74 }