Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e2 + 10;
- const int AZ = 26;
- string str[N];
- int len[N], indeg[N];
- vector <int> g[AZ + 10];
- bool inpath[AZ + 10];
- int to_int(char a){
- return a - 'a' + 1;
- }
- char to_char(int a){
- return a + 'a' - 1;
- }
- int main(){
- int n;
- scanf("%d", &n);
- for(int i=1;i<=n;i++){
- cin >> str[i];
- len[i] = str[i].size();
- if(i == 1) continue;
- int pre = 0, cur = 0;
- while(pre < len[i - 1] and cur < len[i] and str[i - 1][pre] == str[i][cur]){
- pre ++, cur ++;
- }
- if(pre < len[i - 1] and cur < len[i]) g[to_int(str[i - 1][pre])].push_back(to_int(str[i][cur]));
- }
- for(int u=1;u<=AZ;u++){
- if(g[u].empty()) continue;
- for(auto v: g[u]){
- indeg[v] ++;
- inpath[v] = true;
- }
- }
- priority_queue <int, vector <int>, greater <int>> q;
- for(int i=1;i<=AZ;i++)
- if(indeg[i] == 0) q.push(i);
- vector <int> seq;
- while(!q.empty()){
- int u = q.top(); q.pop();
- seq.push_back(u);
- for(auto v: g[u]){
- indeg[v] --;
- if(indeg[v] == 0) q.push(v);
- }
- }
- if(seq.size() < 26) printf("-1");
- else{
- for(auto s: seq) printf("%c", to_char(s));
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment