#include<stdio.h>
#include<string.h>
#define node 5000
#define sigma 60
//module start
struct Trie{
int ch[node][sigma];
int val[node];
int size;
Trie(){
size=1;
memset(ch,0,sizeof(ch));
memset(val,0,sizeof(val));
}
int id(char c){
if(c<='Z' && c>='A')
return c-'A'+26;
if(c<='z' && c>='a')
return c-'a';
}
char C(int n){
if(n<26) return n+'a';
return n-26+'A';
}
void insert(char *s,int v){
int u=0,n=strlen(s),i;
for(i=0;i<n;i++){
int c=id(s[i]);
if(ch[u][c]==0){
ch[u][c]=size++;
}
u=ch[u][c];
}
val[u]=v;
}
int serch(char *s){
int u=0,n=strlen(s),i;
for(i=0;i<n;i++){
int c=id(s[i]);
u=ch[u][c];
}
return val[u];
}
void dfs(int u,int v,char *s){
int i;
for(i=0;i<52;i++){
int n=ch[u][i];
if(n){
s[v]=C(i);
if(val[n]) s[v+1]=0,puts(s);
dfs(n,v+1,s);
}
}
}
void print(){
char r[1005];
dfs(0,0,r);
}
};
//end
Trie tree;
char s[1005];
int main(){
int x,n;
Trie(tree);
while(scanf("%d %s",&x,s)!=EOF){
n=tree.serch(s);
//插入字串
if(x==1){
if(n==-1) tree.insert(s,1);
else{
tree.insert(s,n+1);
}
}
//查詢字串次數
else{
printf("%d\n",n);
}
}
//印出所有字串
tree.print();
}
沒有留言:
張貼留言