UVA156
#include<iostream> #include<vector> #include<map> #include<cctype> #include<algorithm> #include<string> #include<cstring> using namespace std; string to_lower(const string s) { string temp; for(int i=0;i<s.length();i++) temp[i]=tolower(s[i]); return temp; } bool is_equal(const string sa,const string sb) { if(sa.length()==sb.length()) { int flag=0; vector<char> va; vector<char> vb; for(int i=0;i<sa.length();i++) { va.push_back(tolower(sa[i])); vb.push_back(tolower(sb[i])); } sort(va.begin(),va.end()); sort(vb.begin(),vb.end()); for(int j=0;j<va.size();j++) { if(va[j]==vb[j]) flag++; else break; } if(flag==va.size())return 1; else return 0; } else return 0; } int main() { map<string,int>m; vector<string> vv; string s=""; int i; while(getline(cin,s)) { if(s=="#")break; s.insert(0,"*"); s.insert(s.length(),"*"); int temp1=0,temp2=0; string temp_str=""; for(i=1;i<s.length();i++) { if(isalpha(s[i])&&!isalpha(s[i-1])) temp1=i; if(isalpha(s[i])&&!isalpha(s[i+1])) temp2=i; if(temp1&&temp2) { temp_str=s.substr(temp1,temp2-temp1+1); m[temp_str]++; temp_str=""; temp1=0; temp2=0; } } s=""; } map<string,int>::iterator it; map<string ,int>::iterator its; for(it=m.begin();it!=m.end();it++) { for(its=it;its!=m.end();its++) { if(it!=its) { if(is_equal(it->first,its->first)) { it->second=0; its->second=0; } } } } for(it=m.begin();it!=m.end();it++) { if(it->second==1) vv.push_back(it->first); } sort(vv.begin(),vv.end()); for(i=0;i<vv.size();i++) cout<<vv[i]<<endl; return 0; }