给定几个字符串 按照某种字符序排序的字符串 求出有没有符合这种要求的字符序
主要是判断有没有环
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>
#include <vector>
#include <queue>
#define MEM(a,x) memset(a,x,sizeof a)
#define eps 1e-8
#define MOD 10009
#define MAXN 10010
#define MAXM 100010
#define INF 99999999
#define ll __int64
#define bug cout<<"here"<<endl
#define fread freopen("ceshi.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int Read()
{
char c = getchar();
while (c < '0' || c > '9') c = getchar();
int x = 0;
while (c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x;
}
void Print(int a)
{
if(a>9)
Print(a/10);
putchar(a%10+'0');
}
char name[110][110];
vector<int> vec[30];
int rd[30];
int vis[30];
int num[30];
int cnt;
int Topsort()
{
cnt=0;
queue<int> que;
for(int i=0;i<26;i++)
{
if(vis[i]&&rd[i]==0)
{
// cout<<"ii "<<i<<endl;
que.push(i);
num[cnt++]=i;
}
}
while(!que.empty())
{
int u=que.front(); que.pop();
for(int i=0;i<vec[u].size();i++)
{
rd[vec[u][i]]--;
if(rd[vec[u][i]]==0)
{
que.push(vec[u][i]);
num[cnt++]=vec[u][i];
}
}
}
// cout<<"cnt "<<cnt<<endl;
for(int i=0;i<26;i++)
if(vis[i]&&rd[i]>0)
return 1;
return 0;
}
int main()
{
// freopen("C.in", "r", stdin);
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
scanf("%s",name[i]);
MEM(vis,0); MEM(rd,0);
int flag=0;
for(int i=0;i<26;i++)
vec[i].clear();
for(int i=1;i<n;i++)
{
if(strcmp(name[i-1],name[i])==0) continue;
int len1=strlen(name[i-1]);
int len2=strlen(name[i]);
for(int j=0;j<len1;j++)
{
if(name[i-1][j]!='\0'&&name[i][j]=='\0')
{
flag=1;
break;
}
if(name[i-1][j]==name[i][j]) continue;
int a=name[i-1][j]-'a';
int b=name[i][j]-'a';
// cout<<"a "<<a<<" b "<<b<<endl;
vis[a]=vis[b]=1;
vec[a].push_back(b);
rd[b]++;
break;
}
if(flag)
break;
}
if(flag)
puts("Impossible");
else
{
int ans=Topsort();
if(ans)
puts("Impossible");
else
{
for(int i=0;i<cnt;i++)
printf("%c",num[i]+'a');
for(int i=0;i<26;i++)
if(!vis[i])
printf("%c",i+'a');
puts("");
}
}
}
return 0;
}