#include <cstdio> #include <cstring> #include <iostream> #include <queue>using namespace std; int T;int Ma[30][30];char a[105][105];void tpusort () {int d[30];queue<int> que;queue<int> ans;int dd = 0;for ( int i = 0;i < 26;i++) {int cc = 0;for (int j = 0;j < 26;j++) {cc + = Ma[j][i];} D[i] = cc;if (cc = = 0) {Que.push (i);}} while (!que.empty ()) {int TM = Que.front (), Que.pop (), Ans.push (tm), for (int i = 0;i < 26;i++) {if (ma[tm][i] = = 1) {Ma[tm][i ] = 0;d[i]--;if (d[i] = = 0) {Que.push (i);}}} if (ans.size () = =) {while (!ans.empty ()) {int TM = Ans.front (); Ans.pop ();p Utchar (tm+ ' a ');} printf ("\ n");} else{printf ("impossible\n");}} int main () {scanf ("%d", &t), memset (Ma,0,sizeof (MA)), for (int i = 0;i < t;i++) {scanf ("%s", A[i]);} int flag = 1;for (int i = 0;i < t;i++) {for (int j = 0;j < i;j++) {for (int k = 0;a[j][k];k++) {if (a[i][k] = = ' + ') {flag = 0;break;} if (a[i][k]! = A[j][k]) {ma[a[j][k]-' a '][a[i][k]-' a '] = 1;break;}}} if (flag) {Tpusort ();} else{printf ("impossible\n");} Return 0;}
Codeforces 510c Fox and Names topology sequencing