#include <iostream>
using namespace std;
int n, m;
string map[21];
int dx[4] = { 0,0,1,-1 };
int dy[4] = { 1,-1,0,0 };
int DFS(int cnt, int x1, int y1, int x2, int y2) {
if (cnt==11) {
return -1;
}
bool flag1 = false, flag2 = false;
if (x1 >= n || x1 < 0 || y1<0 || y1 >= m) flag1 = true;
if (x2 >= n || x2 < 0 || y2<0 || y2 >= m) flag2 = true;
if(flag1 &&flag2) return -1;
if (flag1 || flag2 ) return cnt;
int ans = -1;
for (int i = 0; i < 4; i++) {
int xx1 = x1 + dx[i];
int yy1 = y1 + dy[i];
int xx2 = x2 + dx[i];
int yy2 = y2 + dy[i];
if (xx1 >= 0 && xx1 < n && yy1 < m && yy1 >= 0 && map[xx1][yy1] == '#') {
xx1 = x1;
yy1 = y1;
}
if (xx2 >= 0 && xx2 < n && yy2 < m && yy2 >= 0 && map[xx2][yy2] == '#') {
xx2 = x2;
yy2 = y2;
}
int temp = DFS(cnt + 1, xx1, yy1, xx2, yy2);
if (temp == -1) continue;
if (ans == -1 || ans > temp) ans = temp;
}
return ans;
}
int main() {
//freopen("in1.txt", "rt", stdin);
int x1, x2, y1, y2;
x1 = y1 = x2 = y2 = -1;
cin >> n>> m;
//scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
cin >> map[i];
for (int j = 0; j < m; j++) {
if (map[i][j] == 'o') {
if (x1==-1) {
x1 = i, y1 = j;
}
else {
x2 = i, y2 = j;
}
map[i][j] = '.';
}
}
}
cout << DFS(0, x1, y1, x2, y2) << '\n';
//printf("%d", DFS(0, x1, x2, y1, y2));
return 0;
}
scanf, printf을 쓰면 자꾸 틀렸다고 나온다... cin, cout을 사용해야겠다.