题目:
代码:
#include<bits/stdc++.h>
using namespace std;
bool isend[500005];
int nxt[500005][26];
int n,m,cnt=0;
char str[15];
int l=0;
void insert(char s[],int len){
int now=0;
for(int i=0;i<len;i++){
int x=s[i]-'a';
if(!nxt[now][x]){
nxt[now][x]=++cnt;
}
now=nxt[now][x];
}
isend[now]=1;
}
int find(char s[],int len){
int now=0;
for(int i=0;i<len;i++){
int x=s[i]-'a';
if(!nxt[now][x]) {
return 0;
}
now=nxt[now][x];
}
return isend[now];
}
void dfs(int x){
for(int i=0;i<26;i++){
if(!nxt[x][i])continue;
str[++l]='a'+i;
if(isend[nxt[x][i]]){
for(int i=1;i<=l;i++){
printf("%c",str[i]);
}
printf("\n");
}
dfs(nxt[x][i]);
--l;
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
char s[15];
scanf("%s",s);
insert(s,strlen(s));
}
dfs(0);
return 0;
}