using namespace std; #include "iostream" #include "vector" struct Rule { Rule(){}; Rule(bool l, bool m, bool r){ left = l; middle = m; right = r; } bool left; bool middle; bool right; }; vector makeRules(int n) { vector retVal; if(n >= 128) { //111 retVal.emplace_back(true, true, true); n -= 128; } if(n >= 64) { //110 retVal.emplace_back(true, true, false); n -= 64; } if(n >= 32) { //101 retVal.emplace_back(true, false, true); n -= 32; } if(n >= 16) { //100 retVal.emplace_back(true, false, false); n -= 16; } if(n >= 8) { //011 retVal.emplace_back(false, true, true); n -= 8; } if(n >= 4) { //010 retVal.emplace_back(false, true, false); n -= 4; } if(n >= 2) { //001 retVal.emplace_back(false, false, true); n -= 2; } if(n >= 1) { //000 retVal.emplace_back(false, false, false); n -= 1; } return retVal; } bool survives (const Rule& current, const vector& rules) { for (auto x : rules) { if(current.left == x.left && current.middle == x.middle && current.right == x.right) return true; } return false; } Rule makeRuleFromChars(const string& line, size_t pos) { Rule rule( line[pos] == 'X', line[pos+1] == 'X', line[pos+2] == 'X' ); return rule; } string generateLine(const string& lastLine, const vector& rules) { string line = "." + lastLine + "."; string newLine; for (size_t i = 0; i < lastLine.size(); ++i) { Rule rl = makeRuleFromChars(line, i); if(survives(rl, rules)) { newLine += "X"; } else { newLine += "."; } } return newLine; } int main() { int r, k; cin >> r; cin >> k; string line; getline(cin, line); getline(cin, line, '\n'); vector rules = makeRules(r); for (int i = 0; i < k; ++i) { line = generateLine(line, rules); cout << line << endl; } return 0; }