#include #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie (0); int codedRules, noGens; cin >> codedRules >> noGens; string firstGenStr; cin >> firstGenStr; vector gen; for (char c : firstGenStr) { if (c == 'X') { gen.push_back(true); } else if (c == '.') { gen.push_back(false); } } unordered_map rules; rules[0b111] = codedRules & (1 << 7); rules[0b110] = codedRules & (1 << 6); rules[0b101] = codedRules & (1 << 5); rules[0b100] = codedRules & (1 << 4); rules[0b011] = codedRules & (1 << 3); rules[0b010] = codedRules & (1 << 2); rules[0b001] = codedRules & (1 << 1); rules[0b000] = codedRules & (1 << 0); for (int genIndex = 0; genIndex < noGens; genIndex++) { vector nextGen (gen.size()); for (int cellIndex = 0; cellIndex < gen.size (); cellIndex++) { int prevCell = (cellIndex == 0) ? 0 : gen[cellIndex - 1]; int currCell = gen[cellIndex]; int nextCell = (cellIndex == gen.size () - 1) ? 0 : gen[cellIndex + 1]; int ruleToUse = (prevCell << 2) + (currCell << 1) + (nextCell << 0); nextGen[cellIndex] = rules[ruleToUse]; } gen = nextGen; for (bool b : gen) { if (b) { cout << 'X'; } else { cout << '.'; } } cout << endl; } return 0; }