#include <bits/stdc++.h> // 导入标准库的所有头文件
using namespace std;
// 定义一个结构体 `point`,用来存储字符的相关信息
struct point {
int num; // 记录字符在字符串中出现的次数
vector<int> AA; // 记录字符在字符串中出现的位置(索引)
bool flag = false; // 用来判断是不是该字符第一次被输出
};
int main() {
string s; // 用来存储输入的字符串
map<char, point> mapp; // 定义一个映射,用来存储每个字符及其对应的 `point` 结构体
while (cin >> s) { // 逐行读取输入的字符串
// 第一次遍历字符串,统计每个字符的出现次数
for (int i = 0; i < s.size(); i++) {
mapp[s[i]].num++;
}
// 第二次遍历字符串,记录每个字符的出现位置(如果出现次数大于1)
for (int i = 0; i < s.size(); i++) {
if (mapp[s[i]].num > 1) {
mapp[s[i]].AA.push_back(i);
}
}
// 第三次遍历字符串,输出每个出现次数大于1且还未被输出的字符及其出现的位置
for (int i = 0; i < s.size(); i++) {
if (mapp[s[i]].num > 1 && mapp[s[i]].flag == false) {
for (int j = 0; j < mapp[s[i]].AA.size(); j++) {
if (j == 0)
printf("%c:%d", s[i], mapp[s[i]].AA[j]);
else
printf(",%c:%d", s[i], mapp[s[i]].AA[j]);
}
cout << endl;
mapp[s[i]].flag = true; // 标记该字符已被输出
}
}
}
return 0;
}