/*
本例按字符出现顺序输出,时间复杂度O(n),空间O(n)
1、一共256个字符,申请长度为256的字符列表charInfos[256],charInfos[c]中记录字符c的数量和位置。
2、申请一个字符数组chars,按顺序记录出现的字符,num为其长度。
3、输入:略
4、输出:字符数组chars,如果字符chars[i]出现的次数charInfos[chars[i]].count大于1,即可输出该字符和它的位置。
*/

#include <iostream>
#include <string>
#include <vector>
using namespace std;

struct CharInfo {
    int count = 0;
    vector<int> positions;
};

int main() {
    string input;
    while (getline(cin, input)) {
        CharInfo charInfos[256]; // ASCII 码表大小
        int num = 0;        // 不同字符的数量
        int chars[100];      // 用于存储这些字符,


        for (int i = 0; i < input.length(); ++i) {
            unsigned int c = input[i]; 
            if (charInfos[c].count == 0)
                chars[num++] = c;
            charInfos[c].count++;
            charInfos[c].positions.push_back(i);
        }


        for (int i=0; i<num; ++i)
        {
            int c = chars[i];    // 字符
            int n = charInfos[c].positions.size(); // 字符的数量
            if(n==1) continue;
            for(int j=0; j<n; j++){
                cout<<char(c)<<":"<<charInfos[c].positions[j];
                if(j!=n-1)
                    cout<<",";
            }
            cout<<endl;
        }
    }
    return 0;
}