//list of servers
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
int cmps(char *, char *);
void getn(char *, char *);
int vnm(char *, char *);
//global arrays
char s[200], ms[300][200];
//
struct rpo{
char ns[50];
char ms[5000];
};
int main(){
struct rpo rp[300];
int n,i,j,h,m,l,v;
char * k;
n=0;
while(fgets(s,200,stdin)){
if(strstr(s,"@")){
strcpy(ms[n],s);
n++;
}
}
//
m=0;
for(i=0; i<n; i++){ //go through the array of rows
j=0;k=ms[i];
while((k=strstr(k+j,"@"))){ //find out names of servers
h=0;
while(1){
if(*(k+h+1)==' '||*(k+h+1)==','||*(k+h+1)=='\n')break;
s[h]=*(k+h+1);h++;
}
if(h>0){//name of server found
s[h]='\0';
for(v=0; v<m; v++){
if(!cmps(rp[v].ns,s))break;
}
if(v==m){//add server with user
//server
strcpy(rp[m].ns,s);
//user
getn(ms[i],s);
strcpy(rp[m].ms,s);
m++;
}else{//such server exists, add user
getn(ms[i],s);
if(!vnm(rp[v].ms,s)) {
strcat(rp[v].ms,",");
strcat(rp[v].ms,s);
};
}
}
j++;
}
}
//*********************************************************************
for(v=0; v<m; v++) printf("%s %s \n",rp[v].ns, rp[v].ms);
//*********************************************************************
return 0;
}
//function of comparison
int cmps(char * s1, char * s2){
int l = strlen(s2);
char * ss = (char *)malloc(l+1);
strncpy(ss,s1,l); ss[l]='\0';
if((s1[l]==' '||s1[l]=='\0')&&(!strcmp(s2,ss))){
free(ss);
return 0;
}
free(ss);
return 1;
}
//get name
void getn(char * s, char * ns){
int i1=0,i2=0,p=0;
while(1){
if(p==1&&(s[i1]==' '||s[i1]=='\n'))break;
if(s[i1]==' '){
i1++; continue;
}
p=1; ns[i2]=s[i1]; i1++; i2++;
}
ns[i2]='\0';
}
//check the user name
int vnm(char * s, char * ns){
int i1=0,i2,p=0;
char ss[100];
while(1){
i2=0;
while(1){
if(s[i1]!=' '&&s[i1]!=','&&s[i1]!='\n'&&s[i1]!='\0'){
ss[i2]=s[i1]; i1++; i2++; continue;
}
ss[i2]='\0';break;
}
if(strcmp(ns,ss)==0){
p=1; break;
};
if(s[i1]!=',')break;
i1++;
}
return p;
}