/**
* author: orzvanh14 ( Độc cô cầu đặc )
* created: 23.12.2022 10:08:02
* too lazy to update time
**/
// i wants to take ioi
//binhtinhtutinkhongcaycunhungmotkhikhongcontutinnualatuyetvong
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nn "\n"
#define pi pair<int, int>
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define eb emplace_back
#define pb push_back
#define TASK " "
#define ms(a, x) memset(a, x, sizeof(a))
#define all(a) a.begin(), a.end()
#define All(a, n) a + 1, a + 1 + n
#define LOG 19
const int INF = 1e18;
const int mod = 1e9+7;
const int N = 500 + 5;
int MOD = 998244353;
int bit[200000];
int r, c, t;
char a[N][N];
int sr = -1, sc, st, er, ec;
int d[N][N][4];
bool vis[N][N][4];
int sx[] = {0, 0, 1, -1};
int sy[] = {1, -1, 0, 0};
bool oki(int x, int y) {
return (x >= 1 && x <= r && y >= 1 && y <= c && a[x][y] != '#');
}
bool ok(int x, int y, int st) {
if(st == 0) return oki(x, y) && a[x][y] != 'E';
if(st == 1) return oki(x, y) && oki(x, y - 1);
if(st == 2) return oki(x, y) && oki(x - 1, y);
return false;
}
void nhap(){
}
void bfs(){
if(r == 0 && c == 0) return;
int sr = -1;
queue<tuple<int, int, int>> q;
for(int i = 1; i <= r; i++){
for(int j = 1; j <= c; j++){
cin >> a[i][j];
for(int k = 0; k < 3; k++){
vis[i][j][k] = false;
d[i][j][k] = 0;
}
if(a[i][j] == 'X'){
if(sr == -1){
sr = i; sc = j; st = 0;
}
else{
if(i == sr) st = 1;
else st = 2;
sr = i; sc = j;
}
}
else if(a[i][j] == 'O'){
er = i; ec = j;
}
}
}
q.push({sr, sc, st});
vis[sr][sc][st] = true;
d[sr][sc][st] = 0;
while(!q.empty()){
auto [x, y, tt] = q.front(); q.pop();
if(tt == 0 && x == er && y == ec){
cout << d[x][y][tt] << nn;
return;
}
int cx, cy, cst;
for(int i = 0; i < 4; i++){
if(tt == 0){
if(i == 0){
cx = x; cy = y - 1; cst = 1;
}
else if(i == 1){
cx = x; cy = y + 2; cst = 1;
}
else if(i == 2){
cx = x - 1; cy = y; cst = 2;
}
else{
cx = x + 2; cy = y; cst = 2;
}
}
else if(tt == 1){
if(i == 0){
cx = x; cy = y - 2; cst = 0;
}
else if(i == 1){
cx = x; cy = y + 1; cst = 0;
}
else if(i == 2){
cx = x - 1; cy = y; cst = 1;
}
else{
cx = x + 1; cy = y; cst = 1;
}
}
else{
if(i == 0){
cx = x; cy = y - 1; cst = 2;
}
else if(i == 1){
cx = x; cy = y + 1; cst = 2;
}
else if(i == 2){
cx = x - 2; cy = y; cst = 0;
}
else{
cx = x + 1; cy = y; cst = 0;
}
}
if(ok(cx, cy, cst) && !vis[cx][cy][cst]){
d[cx][cy][cst] = d[x][y][tt] + 1;
vis[cx][cy][cst] = 1;
q.push({cx, cy, cst});
}
}
}
cout << "Impossible" << nn;
}
signed main() {
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
while(cin >> r >> c){
bfs();
}
return 0;
}
LyoqCiAqICAgIGF1dGhvcjogIG9yenZhbmgxNCAoIMSQ4buZYyBjw7QgY+G6p3UgxJHhurdjICkKICogICAgY3JlYXRlZDogMjMuMTIuMjAyMiAxMDowODowMgogKiAgICB0b28gbGF6eSB0byB1cGRhdGUgdGltZQoqKi8KLy8gaSB3YW50cyB0byB0YWtlIGlvaQovL2Jpbmh0aW5odHV0aW5raG9uZ2NheWN1bmh1bmdtb3RraGlraG9uZ2NvbnR1dGlubnVhbGF0dXlldHZvbmcKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgbm4gIlxuIgojZGVmaW5lIHBpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgZWIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgVEFTSyAiICIKCiNkZWZpbmUgbXMoYSwgeCkgbWVtc2V0KGEsIHgsIHNpemVvZihhKSkKI2RlZmluZSBhbGwoYSkgYS5iZWdpbigpLCBhLmVuZCgpCiNkZWZpbmUgQWxsKGEsIG4pIGEgKyAxLCBhICsgMSArIG4KCiNkZWZpbmUgTE9HIDE5CgoKY29uc3QgaW50IElORiA9IDFlMTg7CmNvbnN0IGludCBtb2QgPSAxZTkrNzsKY29uc3QgaW50IE4gPSA1MDAgICsgNTsKaW50IE1PRCA9IDk5ODI0NDM1MzsKaW50IGJpdFsyMDAwMDBdOwppbnQgciwgYywgdDsKY2hhciBhW05dW05dOwppbnQgc3IgPSAtMSwgc2MsIHN0LCBlciwgZWM7CmludCBkW05dW05dWzRdOwpib29sIHZpc1tOXVtOXVs0XTsKaW50IHN4W10gPSB7MCwgMCwgMSwgLTF9OwppbnQgc3lbXSA9IHsxLCAtMSwgMCwgMH07CmJvb2wgb2tpKGludCB4LCBpbnQgeSkgewogICAgcmV0dXJuICh4ID49IDEgJiYgeCA8PSByICYmIHkgPj0gMSAmJiB5IDw9IGMgJiYgYVt4XVt5XSAhPSAnIycpOwp9CmJvb2wgb2soaW50IHgsIGludCB5LCBpbnQgc3QpIHsKICAgIGlmKHN0ID09IDApIHJldHVybiBva2koeCwgeSkgJiYgYVt4XVt5XSAhPSAnRSc7CiAgICBpZihzdCA9PSAxKSByZXR1cm4gb2tpKHgsIHkpICYmIG9raSh4LCB5IC0gMSk7CiAgICBpZihzdCA9PSAyKSByZXR1cm4gb2tpKHgsIHkpICYmIG9raSh4IC0gMSwgeSk7CiAgICByZXR1cm4gZmFsc2U7Cn0Kdm9pZCBuaGFwKCl7CiAgICAKfQoKdm9pZCBiZnMoKXsKCgkJaWYociA9PSAwICYmIGMgPT0gMCkgcmV0dXJuOwoJCWludCBzciA9IC0xOwoJCXF1ZXVlPHR1cGxlPGludCwgaW50LCBpbnQ+PiBxOwoJCWZvcihpbnQgaSA9IDE7IGkgPD0gcjsgaSsrKXsKCQkJZm9yKGludCBqID0gMTsgaiA8PSBjOyBqKyspewoJCQkJY2luID4+IGFbaV1bal07CgkJCQlmb3IoaW50IGsgPSAwOyBrIDwgMzsgaysrKXsKICAgICAgICAgICAgICAgIAl2aXNbaV1bal1ba10gPSBmYWxzZTsKICAgICAgICAgICAgICAgIAlkW2ldW2pdW2tdID0gMDsKICAgICAgICAgICAgCX0KCQkJCWlmKGFbaV1bal0gPT0gJ1gnKXsKICAgICAgICAgICAgICAgIAlpZihzciA9PSAtMSl7CiAgICAgICAgICAgICAgICAgICAgCXNyID0gaTsgc2MgPSBqOyBzdCA9IDA7CiAgICAgICAgICAgICAgICAJfQogICAgICAgICAgICAgICAgCWVsc2V7CiAgICAgICAgICAgICAgICAgICAgCWlmKGkgPT0gc3IpIHN0ID0gMTsgCiAgICAgICAgICAgICAgICAgICAgCWVsc2Ugc3QgPSAyOyAKICAgICAgICAgICAgICAgICAgICAJc3IgPSBpOyBzYyA9IGo7CiAgICAgICAgICAgICAgICAJfQogICAgICAgICAgICAJfSAKICAgICAgICAgICAgCWVsc2UgaWYoYVtpXVtqXSA9PSAnTycpewogICAgICAgICAgICAgICAgCWVyID0gaTsgZWMgPSBqOwogICAgICAgICAgICAJfQoJCQl9CgkJfQoJCXEucHVzaCh7c3IsIHNjLCBzdH0pOwoJCXZpc1tzcl1bc2NdW3N0XSA9IHRydWU7CgkgICAgZFtzcl1bc2NdW3N0XSA9IDA7CgkgICAgd2hpbGUoIXEuZW1wdHkoKSl7CiAgICAgICAgCWF1dG8gW3gsIHksIHR0XSA9IHEuZnJvbnQoKTsgcS5wb3AoKTsKICAgICAgICAJaWYodHQgPT0gMCAmJiB4ID09IGVyICYmIHkgPT0gZWMpewogICAgICAgICAgICAJY291dCA8PCBkW3hdW3ldW3R0XSA8PCBubjsKICAgICAgICAgICAgCXJldHVybjsKICAgICAgICAJfQogICAgICAgIAlpbnQgY3gsIGN5LCBjc3Q7CiAgICAgICAgCWZvcihpbnQgaSA9IDA7IGkgPCA0OyBpKyspewogICAgICAgICAgICAJaWYodHQgPT0gMCl7IAogICAgICAgICAgICAgICAgCWlmKGkgPT0gMCl7IAogICAgICAgICAgICAgICAgCQljeCA9IHg7IGN5ID0geSAtIDE7IGNzdCA9IDE7IAogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIAllbHNlIGlmKGkgPT0gMSl7IAogICAgICAgICAgICAgICAgCQljeCA9IHg7IGN5ID0geSArIDI7IGNzdCA9IDE7IAogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIAllbHNlIGlmKGkgPT0gMil7IAogICAgICAgICAgICAgICAgCQljeCA9IHggLSAxOyBjeSA9IHk7IGNzdCA9IDI7CiAgICAgICAgICAgICAgICAJfQogICAgICAgICAgICAgCQllbHNleyAKICAgICAgICAgICAgIAkJCWN4ID0geCArIDI7IGN5ID0geTsgY3N0ID0gMjsgCiAgICAgICAgICAgICAJCX0KICAgICAgICAgICAgCX0gCiAgICAgICAgICAgIAllbHNlIGlmKHR0ID09IDEpeyAKICAgICAgICAgICAgICAgIAlpZihpID09IDApeyAKICAgICAgICAgICAgICAgIAkJY3ggPSB4OyBjeSA9IHkgLSAyOyBjc3QgPSAwOyAKICAgICAgICAgICAgICAgIAl9CiAgICAgICAgICAgICAgICAJZWxzZSBpZihpID09IDEpeyAKICAgICAgICAgICAgICAgIAkJY3ggPSB4OyBjeSA9IHkgKyAxOyBjc3QgPSAwOyAKICAgICAgICAgICAgICAgIAl9CiAgICAgICAgICAgICAgICAJZWxzZSBpZihpID09IDIpeyAKICAgICAgICAgICAgICAgIAkJY3ggPSB4IC0gMTsgY3kgPSB5OyBjc3QgPSAxOyAKICAgICAgICAgICAgICAgIAl9CiAgICAgICAgICAgICAgICAJZWxzZXsgCiAgICAgICAgICAgICAgICAJCWN4ID0geCArIDE7IGN5ID0geTsgY3N0ID0gMTsgCiAgICAgICAgICAgICAgICAJfQogICAgICAgICAgICAJfSAKICAgICAgICAgICAgCWVsc2V7IAogICAgICAgICAgICAgICAgCWlmKGkgPT0gMCl7IAogICAgICAgICAgICAgICAgCQljeCA9IHg7IGN5ID0geSAtIDE7IGNzdCA9IDI7IAogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgCSAJZWxzZSBpZihpID09IDEpeyAKICAgICAgICAgICAgICAgCSAJCWN4ID0geDsgY3kgPSB5ICsgMTsgY3N0ID0gMjsgCiAgICAgICAgICAgICAgIAkgCX0KICAgICAgICAgICAgICAgIAllbHNlIGlmKGkgPT0gMil7IAogICAgICAgICAgICAgICAgCQljeCA9IHggLSAyOyBjeSA9IHk7IGNzdCA9IDA7IAogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIAllbHNleyAKICAgICAgICAgICAgICAgIAkJY3ggPSB4ICsgMTsgY3kgPSB5OyBjc3QgPSAwOwogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgCX0KICAgICAgICAgICAgCWlmKG9rKGN4LCBjeSwgY3N0KSAmJiAhdmlzW2N4XVtjeV1bY3N0XSl7CiAgICAgICAgICAgICAgICAJZFtjeF1bY3ldW2NzdF0gPSBkW3hdW3ldW3R0XSArIDE7CiAgICAgICAgICAgICAgICAJdmlzW2N4XVtjeV1bY3N0XSA9IDE7CiAgICAgICAgICAgICAgICAJcS5wdXNoKHtjeCwgY3ksIGNzdH0pOwogICAgICAgICAgICAJfQogICAgICAgIAl9CiAgICAJfQogICAgCWNvdXQgPDwgIkltcG9zc2libGUiIDw8IG5uOwoJCQoJCn0Kc2lnbmVkIG1haW4oKSB7CgkvLyBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKCS8vIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luLnRpZSgwKTsKCWNvdXQudGllKDApOwogICAgd2hpbGUoY2luID4+IHIgPj4gYyl7CiAgICAJYmZzKCk7CiAgICB9CglyZXR1cm4gMDsKCn0K