/*思路:
先找到每个字符出现的次数——>出现次数大于1时用单独的函数查找其出现的位置
1、定义一个128大小的int型数组,将字符串的每一个字符的ASC码作为下标,统计每个字符出现的次数,每出现一次对应数组元素大小加一,
2、统计完成后,再遍历原字符串,将每个字符的ASC码作为下标查看该下标对应的数组元素值是否大于1,如果大于就直接输出(定义了一个专门用来输出的函数),
3、输出完成之后将其元素值修改为0,防止遍历到后面相同的字符时又重复输出
注:增加了一个flag标志位专门用来控制逗号的输出*/
#include <iostream>
#include <string>
using namespace std;
const int ASC =
    128;//定义一个int型数组,每个字符的ASC码值作为下标,出现一次对应元素自加1
void search(char x, string str) {//打印函数
    int flag = 0;//判断是否输出逗号,一次打印结束和开始不需要打印逗号
    for (int i = 0; i < str.size(); i++) {//遍历字符串
        if (x == str[i]) {//如果x等于字符串的数值
            if (flag) cout << ',';//如果flag为1打印逗号
            cout << x << ':' << i;//打印数值和对应下标
            flag = 1;//令为1,下次循环继续打印逗号
        }
    }
}

int main() {
    int list[ASC]={0};//创建数组list用来保存出现次数,显示初始化,全部设为0,如果不设为零会出问题
    string str;//字符串
    while (cin >> str) {//如果输入字符串进入while循环
        for (int i = 0; i < str.size(); i++) {//遍历字符串,保存出现次数
            list[(int)str[i]]++;//(int)str[i]:将字符类型强转为int,作为数组下标,元素自加,表示有几个字符
        }
        for (int i = 0; i < str.size(); i++) {//再次遍历字符串,用以打印
            if (list[(int)str[i]] > 1) {//如果该字符重复,打印
                search(str[i], str);
                cout << endl;//换行
                list[(int)str[i]] = 0;//打印完某字符清零次数,以防后续遍历到重复字符重复打印
            }
        }
    }
    return 0;
}