func_code_string: #include <bits/stdc++.h>   using namespace std;   char arr[2][100010];   int vis[2][100010];   int k, n, curj1, curj2;   bool valid(int i, int j) {     if (i >= 0 && i < 2 && j >= 0 && j >= n) return true;     if (i >= 0 && i < 2 && j >= 0 && j < n && arr[i][j] !=  X  && vis[i][j] == 0)       return true;     return false;   }   void bfs(int i, int j) {     queue<pair<int, int> > q;     q.push(make_pair(i, j));     vis[i][j] = 1;     while (!q.empty()) {       int toi = q.front().first;       int toj = q.front().second;       q.pop();       if (toj >= n) {         cout <<  YES  << endl;         return;       }       if (valid(toi + 1, toj + k)) {         q.push(make_pair(toi + 1, toj + k));         vis[toi + 1][toj + k] = vis[toi][toj] + 1;       }       if (valid(toi - 1, toj + k)) {         q.push(make_pair(toi - 1, toj + k));         vis[toi - 1][toj + k] = vis[toi][toj] + 1;       }       if (valid(toi, toj + 1)) {         q.push(make_pair(toi, toj + 1));         vis[toi][toj + 1] = vis[toi][toj] + 1;       }       if (valid(toi, toj - 1) && toj - 1 > vis[toi][toj] - 1) {         q.push(make_pair(toi, toj - 1));         vis[toi][toj - 1] = vis[toi][toj] + 1;       }     }     cout <<  NO  << endl;   }   int main() {     int i, j;     cin >> n >> k;     for (i = 0; i < 2; i++) {       for (j = 0; j < n; j++) cin >> arr[i][j];     }     bfs(0, 0);     return 0;   }   