1 #include <iostream>
2 using namespace std;
3
4 const int MAX = 5005;
5 char Hex[MAX][4];
6
7 void deal16(int t, char ans[])
8 {
9 int tmp[15], h = 0;
10 while(t)
11 {
12 tmp[h++] = t % 16;
13 t /= 16;
14 }
15 for(int j = h-1, k = 0; j >= 0; j--, k++)
16 {
17 if(tmp[j] < 10)
18 ans[k] = tmp[j] + '0';
19 else
20 ans[k] = (tmp[j] - 10) + 'a';
21 }
22 ans[h] = '\0';
23 }
24
25 void to16(char str[], int len)
26 {
27 for(int i = 0; i < len; i++)
28 {
29 int t, h = 0;
30 t = str[i];
31 deal16(t, Hex[i]);
32 }
33 }
34
35 void output(char curstr[])
36 {
37 int len = strlen(curstr);
38 int row;
39 if(len % 16 == 0)
40 row = len / 16;
41 else
42 row = len / 16 + 1;
43 int rr = 0;
44 for(int i = 0, num = 0; i < row; i++, num += 16)
45 {
46 char tmp[15];
47 deal16(num, tmp);
48 int l = strlen(tmp);
49 for(int j = 0; j < 4 - l; j++)
50 printf("0");
51 if(l != 0)
52 printf("%s:", tmp);
53 else
54 printf(":");
55
56 if(len >= 16)
57 {
58 for(int i = 0; i < 16; i += 2)
59 {
60 printf(" %s%s", Hex[rr + i], Hex[rr + i + 1]);
61 }
62 printf(" %c", curstr[rr + 0]);
63 for(int i = 1; i < 16; i++)
64 printf("%c", curstr[rr + i]);
65 printf("\n");
66 len -= 16;
67 rr += 16;
68 }
69 else if(len != 0)
70 {
71 printf(" ");
72 int cnt = 0;
73 for(int i = 0; i < len; i++)
74 {
75 printf("%s", Hex[rr + i]);
76 cnt += 2;
77 if(i&1)
78 {
79 printf(" ");
80 cnt++;
81 }
82 }
83 for(int i = 0; i < 39 - cnt; i++)
84 printf(" ");
85 printf(" %c", curstr[rr + 0]);
86 for(int i = 1; i < len; i++)
87 printf("%c", curstr[rr + i]);
88 printf("\n");
89 }
90 }
91 }
92
93 int main(void)
94 {
95 #ifndef ONLINE_JUDGE
96 //freopen("in.txt", "r", stdin);
97 #endif
98 char str[MAX], curstr[MAX];
99 while(gets(str))
100 {
101 int len = strlen(str);
102 for(int i = 0; i < len; i++)
103 {
104 if(str[i] >= 'A' && str[i] <= 'Z')
105 curstr[i] = tolower(str[i]);
106 else
107 curstr[i] = toupper(str[i]);
108 }
109 curstr[len] = '\0';
110 to16(str, len);
111 output(curstr);
112 }
113 return 0;
114 }