Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int visited[100005];
- int indegree[26];
- int exists[26] = {0};
- vector<vector<int>> edges;
- stack<int> answer;
- void dfs(int i)
- {
- visited[i] = 1;
- cout << edges[i].size() << endl;
- for(int j = 0;j < edges[i].size();j++)
- {
- if(!visited[edges[i][j]] && exists[edges[i][j]])
- dfs(edges[i][j]);
- }
- answer.push(i);
- }
- int main()
- {
- //freopen("input.txt","r",stdin); freopen("output.txt","w",stdout);
- ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- string temp,s;
- cin >> temp;
- edges.assign(30,vector<int>());
- do
- {
- cin >> s;
- if(s!="#")
- for(int i = 0;i < min(s.length(),temp.length());i++)
- {
- exists[(s[i]-'A')] = 1;
- exists[(s[i+1]-'A')] = 1;
- if(s[i] != temp[i])
- {
- edges[temp[i]-'A'].push_back(s[i]-'A');
- indegree[s[i]-'A'] = max(indegree[temp[i]-'A'],indegree[s[i]-'A']+1);
- break;
- }
- }
- temp = s;
- } while(s!="#");
- for(int i = 0;i < 26;i++)
- if(exists[i] == 1 && !visited[i] && indegree[i] == 0)
- dfs(i);
- while(!answer.empty())
- {
- cout << (char)(answer.top()+'A');
- answer.pop();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement