#include #include #include #include #include #include #include #include #include #include typedef long long llong; const int MAXN = 1000000 + 10; const int INTINF = 1e9; const llong INF = 1e18; const int MAXLOG = 17; int n, m; std::pair delta[] = {{-1, 0}, {0, -1}}; bool dp[2][MAXN][2]; bool dp2[2][MAXN][2]; std::string t[MAXN]; void solve() { int bRow = 0, bCol = 0; for (int i = 1 ; i <= n ; ++i) { for (int j = 1 ; j <= m ; ++j) { if (t[i][j] == 'L') { t[i][j] = '0'; bRow = i; bCol = j; } } } for (int col = 1 ; col <= m ; ++col) { dp[0][col][0] = dp[0][col][1] = 1; dp2[0][col][0] = dp2[0][col][1] = 0; } for (int row = 1 ; row <= bRow ; ++row) { dp[row & 1][0][0] = dp[row & 1][0][1] = 1; dp2[row & 1][0][0] = dp2[row & 1][0][1] = 0; for (int col = 1 ; col <= m ; ++col) { for (int dir = 0 ; dir < 2 ; ++dir) { if (t[row][col] == '0') { dp[row & 1][col][dir] = dp2[(row - 1) & 1][col][0] || dp2[row & 1][col - 1][1]; } else { dp[row & 1][col][dir] = !dp[(row + delta[dir ^ 1].first) & 1][col + delta[dir ^ 1].second][dir ^ 1]; } } if (t[row][col] == '0') { dp2[row & 1][col][0] = !dp[row & 1][col][0] || dp2[(row - 1) & 1][col][0]; dp2[row & 1][col][1] = !dp[row & 1][col][1] || dp2[row & 1][col - 1][1]; } else { dp2[row & 1][col][0] = dp2[(row + delta[1].first) & 1][col + delta[1].second][1]; dp2[row & 1][col][1] = dp2[(row + delta[0].first) & 1][col + delta[0].second][0]; } } } if (dp[bRow & 1][bCol][0]) std::cout << "L\n"; else std::cout << "K\n"; } void input() { std::cin >> n >> m; for (int i = 1 ; i <= n ; ++i) { std::cin >> t[i]; t[i] = ' ' + t[i]; } } void fastIOI() { freopen("note.in", "r", stdin); freopen("note.out", "w", stdout); std::ios_base :: sync_with_stdio(0); std::cout.tie(nullptr); std::cin.tie(nullptr); } int main() { fastIOI(); input(); solve(); return 0; }