Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <vector>
- std::vector<char> g_priority[26] = {};
- bool g_visited[26] = {};
- void PrintOrder(int cur);
- int main() {
- char prev[21] = {};
- while (std::scanf("%s", prev) != EOF) {
- for (int i = 0; i < 26; ++i) {
- g_priority[i].clear();
- }
- std::memset(g_visited, 0, sizeof(g_visited));
- bool check[26] = {};
- while (true) {
- char cur[21] = {};
- std::scanf("%s", cur);
- if (cur[0] == '#') {
- break;
- }
- std::size_t len = std::min(std::strlen(prev), std::strlen(cur));
- for (std::size_t i = 0; i < len; ++i) {
- int p = prev[i] - 'A', c = cur[i] - 'A';
- check[p] = check[c] = true;
- if (p != c) {
- g_priority[c].push_back(p);
- break;
- }
- }
- for (std::size_t i = 0; i <= strlen(cur); ++i) {
- prev[i] = cur[i];
- }
- }
- for (int i = 0; i < 26; ++i) {
- if (check[i] == true) {
- PrintOrder(i);
- }
- }
- std::puts("");
- }
- return EXIT_SUCCESS;
- }
- void PrintOrder(int cur) {
- if (g_visited[cur] == false) {
- for (std::size_t i = 0; i < g_priority[cur].size(); ++i) {
- PrintOrder(g_priority[cur][i]);
- }
- std::putchar(cur + 'A');
- g_visited[cur] = true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement