// UVa 124 - Following Orders
#include <iostream>
#include <stdio.h>
#include <vector>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
string v, sol;
int parents[26];
bool lnk[26][26];
bool yet[26];
void comb(int n) {
if (n == v.length()) {
cout << sol << endl;
return;
}
for (int i = 0; i < v.length(); i++)
if (parents[v[i]] == 0 && yet[v[i]]) {
for (int j = 0; j < v.length(); j++)
if (lnk[v[i]][v[j]])
parents[v[j]]--;
yet[v[i]] = false;
sol += (v[i] + 'a');
comb(n + 1);
sol.erase(sol.length() - 1, 1);
yet[v[i]] = true;
for (int j = 0; j < v.length(); j++)
if (lnk[v[i]][v[j]])
parents[v[j]]++;
}
}
int main() {
string vvars, cons;
int t = 0;
while (getline(cin, vvars)) {
v = "";
for (int i = 0; i < vvars.length(); i += 2)
v += (vvars[i] - 'a');
sort(v.begin(), v.end());
getline(cin, cons);
memset(lnk, false, sizeof(lnk));
memset(parents, 0, sizeof(parents));
for (int i = 0; i < cons.length(); i += 4) {
char a = cons[i] - 'a';
char b = cons[i + 2] - 'a';
lnk[a][b] = true;
parents[b]++;
}
if (t > 0)
cout << endl;
memset(yet, true, sizeof(yet));
sol = "";
comb(0);
t++;
}
return 0;
}
Saturday, June 6, 2015
UVa 124 - Following Orders
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment