Cod sursa(job #542102)
#include <cstdio>
#include <string>
#include <iostream>
#include <vector>
#include <set>
using namespace std;
#define file_in "trie.in"
#define file_out "trie.out"
int tip;
multiset<string> T;
string s;
string s1;
void del(string s){
multiset<string> :: iterator it;
for (it=T.begin();it!=T.end();++it)
if (*it==s){
T.erase(it);
return ;
}
}
int lcp(string s){
int ans=0,i;
set<string> :: iterator it;
for (it=T.begin();it!=T.end();++it){
s1=(*it);
i=0;
while(s1[i]==s[i] && i<s.size()) i++;
ans=max(ans,i);
}
return ans;
}
int main(){
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
while(cin>> tip){
cin >> s;
if (s==" ") break;
if (tip==0){
T.insert(s);
}
else
if (tip==1){
del(s);
}
else
if (tip==2){
printf("%d\n", T.count(s));
}
else
if (tip==3)
{
printf("%d\n", lcp(s));
}
}
return 0;
}