#include <iostream>
#include <vector>
#include <map>
using namespace std;
struct statis{
int count;
vector<int> index;//定义迭代器存储对应下标
};
int main() {
string str;
while(cin>>str){
map<char,statis> mp;//定义散列表,存储字符-统计对应关系
for(int i=0;i<str.length();i++){
if(!mp[str[i]].count) mp[str[i]].count=1;
else mp[str[i]].count++;
//迭代器使用头插法,方便输出下标时按序从尾部弹出
mp[str[i]].index.insert(mp[str[i]].index.begin(),i);
}
for(int i=0;i<str.length();i++){
if(mp[str[i]].count>1){
cout<<str[i]<<":"<<i;//输出结构控制:第一次只输出数对,后面的每对前面都带一个逗号
mp[str[i]].index.pop_back();
for(int j=1;j<mp[str[i]].count;j++){//注意j边界,不要写成index.size(),那样是错的
cout<<","<<str[i]<<":"<<mp[str[i]].index.back();
mp[str[i]].index.pop_back();
}
mp[str[i]].count=-1;
cout<<endl;
}
}
}
return 0;
}