#include #include #include #include using namespace std; class Conversion { public: string Y; int Reachable(string X); map Cache; }; int Conversion::Reachable(string X) { string rev; int i; if (X == Y) return 1; if (X.size() <= Y.size()) return 0; if (Cache.find(X) != Cache.end()) return Cache[X]; if (X[X.size()-1] == 'A') { if (Reachable(X.substr(0,X.size()-1))) return 1; } if (X[0] == 'B') { for (i = X.size()-1; i > 0; i--) rev.push_back(X[i]); if (Reachable(rev)) return 1; } Cache[X] = 0; return 0; } int main(int argc, char **argv) { Conversion c; int ans; if (argc != 3) { fprintf(stderr, "usage: a.out X Y\n"); exit(1); } c.Y = argv[2]; ans = c.Reachable(argv[1]); printf("%s\n", (ans) ? "Yes" : "No"); }