#include <stdio.h>
#include <vector>
#include <set>
#include <iostream>
using namespace std;
const int INF = 1000000000;
int N, M;
int A[100];
int g[100][100];
int a, b, c;
int count_city = 0;
int dp[1024][10];
int dist(int a, int b) {
return max(abs(g[a][0] - g[b][0]), abs(g[a][1] - g[b][1]));
}
int main() {
cin >> N >> M;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
scanf("%c", &c);
if (c == 'L' || c == '#'){
g[count_city][0] = i;
g[count_city][1] = j;
count_city++;
}
}
scanf("%c", &c);
}
for (int i = 0; i < (1<<N); i++) {
for (int j = 0; j < N; j++) {
dp[i][j] = INF;
}
}
dp[0][0] = 0;
for (int mask = 0; mask < (1<<N); mask++) {
for (int i = 0; i < N; i++) {
if (dp[mask][i] == INF) continue;
for (int j = 0; j < N; j++) {
if ((mask & (1 << j)) == 0) {
dp[mask | (1<<j)][j] = min(dp[mask | (1<<j)][j], dp[mask][i] + g[i][j]);
}
}
}
/*for (int i = 0; i < N; i++) {
cout << dp[mask][i] << ' ';
}
cout << endl;*/
}
cout << dp[(1<<N)-1][0] << endl;
int answ;
int mask = (1 << count_city) - 1;
for (int i = 0; i < count_city; i++) {
answ = min(answ, dp[mask][i] + dist(i, 0));
}
printf("%d", answ);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxpb3N0cmVhbT4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmNvbnN0IGludCBJTkYgPSAxMDAwMDAwMDAwOwoKaW50IE4sIE07CmludCBBWzEwMF07CmludCBnWzEwMF1bMTAwXTsKaW50IGEsIGIsIGM7CmludCBjb3VudF9jaXR5ID0gMDsKaW50IGRwWzEwMjRdWzEwXTsKaW50IGRpc3QoaW50IGEsIGludCBiKSB7CglyZXR1cm4gbWF4KGFicyhnW2FdWzBdIC0gZ1tiXVswXSksIGFicyhnW2FdWzFdIC0gZ1tiXVsxXSkpOwp9CmludCBtYWluKCkgewoKICAgIGNpbiA+PiBOID4+IE07CiAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CgkJZm9yIChpbnQgaiA9IDA7IGogPCBNOyBqKyspIHsKCQkJc2NhbmYoIiVjIiwgJmMpOwoJCQlpZiAoYyA9PSAnTCcgfHwgYyA9PSAnIycpeyAKCQkJCWdbY291bnRfY2l0eV1bMF0gPSBpOwoJCQkJZ1tjb3VudF9jaXR5XVsxXSA9IGo7CgkJCQljb3VudF9jaXR5Kys7CgkJCX0KCQl9CgkJc2NhbmYoIiVjIiwgJmMpOwoJfQogICAgCiAgICBmb3IgKGludCBpID0gMDsgaSA8ICgxPDxOKTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBOOyBqKyspIHsKICAgICAgICAgICAgZHBbaV1bal0gPSBJTkY7CiAgICAgICAgfQogICAgfQogICAgCiAgICBkcFswXVswXSA9IDA7CiAgICBmb3IgKGludCBtYXNrID0gMDsgbWFzayA8ICgxPDxOKTsgbWFzaysrKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgaWYgKGRwW21hc2tdW2ldID09IElORikgY29udGludWU7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgTjsgaisrKSB7CiAgICAgICAgICAgICAgICBpZiAoKG1hc2sgJiAoMSA8PCBqKSkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgIGRwW21hc2sgfCAoMTw8aildW2pdID0gbWluKGRwW21hc2sgfCAoMTw8aildW2pdLCBkcFttYXNrXVtpXSArIGdbaV1bal0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgY291dCA8PCBkcFttYXNrXVtpXSA8PCAnICc7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgZW5kbDsqLwogICAgfQogICAgY291dCA8PCBkcFsoMTw8TiktMV1bMF0gPDwgZW5kbDsKICAgICBpbnQgYW5zdzsgICAKaW50IG1hc2sgPSAoMSA8PCBjb3VudF9jaXR5KSAtIDE7Cglmb3IgKGludCBpID0gMDsgaSA8IGNvdW50X2NpdHk7IGkrKykgewoJCWFuc3cgPSBtaW4oYW5zdywgZHBbbWFza11baV0gKyBkaXN0KGksIDApKTsKCX0KCXByaW50ZigiJWQiLCBhbnN3KTsKICAgIAogICAgcmV0dXJuIDA7Cn0K