#include using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); string instructions; getline(cin, instructions); cin.ignore(1); unordered_map> locs; string line; while (getline(cin, line)) { locs[line.substr(0, 3)] = make_pair(line.substr(7, 3), line.substr(12, 3)); } vector starts; for (auto& loc : locs) { if (loc.first[2] == 'A') starts.push_back(loc.first); } unsigned long amounts[starts.size()]; memset(amounts, 0, starts.size() * sizeof(unsigned long)); long n = 0; unsigned int done = starts.size(); while (done > 0) { for (unsigned int i = 0; i < starts.size(); i++) { if (amounts[i] != 0) continue; if (instructions[n % instructions.length()] == 'L') starts[i] = locs[starts[i]].first; else starts[i] = locs[starts[i]].second; if (starts[i][2] == 'Z') { amounts[i] = n + 1; done--; } } n++; } unsigned long val = amounts[0]; for (unsigned int i = 1; i < starts.size(); i++) { val = lcm(val, amounts[i]); } cout << val << '\n'; }