#include <bits/stdc++.h>
using namespace std;
int dx[5] = { 0, 0, 1, 0, -1 };
int dy[5] = { 0, -1, 0, 1, 0 };
typedef pair<int,int> pii;
typedef pair<pii,pii> state;
state st( int x1, int y1, int x2, int y2 )
{
return make_pair( make_pair(x1, y1), make_pair(x2, y2) );
}
bool check( int x, int y, int n, int m )
{
return x >= 0 && y >= 0 && x < n && y < m;
}
int main()
{
int n, m;
while (scanf("%d %d\n", &n, &m) == 2)
{
if (!n && !m) break;
char a[n][m] = { 0 };
for (int i = 0; i < n; i++)
scanf("%s", a[i]);
int xa = -1, ya = -1;
int xb = -1, yb = -1;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (a[i][j] == 'a') xa = i, ya = j;
if (a[i][j] == 'b') xb = i, yb = j;
}
queue<state> q;
q.push(st(xa, ya, xb, yb));
int d[n][m][n][m] = { 0 };
char u[n][m][n][m] = { 0 };
while (!q.empty())
{
state s = q.front(); q.pop();
int x1 = s.first.first;
int y1 = s.first.second;
int x2 = s.second.first;
int y2 = s.second.second;
for (int i = 0; i < 5; i++)
{
int xx1 = x1 + dx[i], yy1 = y1 + dy[i];
if (check(xx1, yy1, n, m) && a[xx1][yy1] != '#')
for (int j = 0; j < 5; j++)
{
int xx2 = x2 + dx[j], yy2 = y2 + dy[j];
if (check(xx2, yy2, n, m) && a[xx2][yy2] != '#' && !u[xx1][yy1][xx2][yy2])
if (!(xx1 == x2 && yy1 == y2) && !(xx2 == x1 && yy2 == y1) && !(xx1 == xx2 && yy1 == yy2))
{
q.push(st(xx1, yy1, xx2, yy2));
u[xx1][yy1][xx2][yy2] = 1;
d[xx1][yy1][xx2][yy2] = d[x1][y1][x2][y2] + 1;
}
}
}
}
if (u[xb][yb][xa][ya])
printf("%d\n", d[xb][yb][xa][ya]);
else
puts("IMPOSSIBLE");
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZHhbNV0gPSB7IDAsIDAsIDEsIDAsIC0xIH07CmludCBkeVs1XSA9IHsgMCwgLTEsIDAsIDEsIDAgfTsKCnR5cGVkZWYgcGFpcjxpbnQsaW50PiBwaWk7CnR5cGVkZWYgcGFpcjxwaWkscGlpPiBzdGF0ZTsKCnN0YXRlIHN0KCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIgKQp7CiAgICByZXR1cm4gbWFrZV9wYWlyKCBtYWtlX3BhaXIoeDEsIHkxKSwgbWFrZV9wYWlyKHgyLCB5MikgKTsKfQoKYm9vbCBjaGVjayggaW50IHgsIGludCB5LCBpbnQgbiwgaW50IG0gKQp7CiAgICByZXR1cm4geCA+PSAwICYmIHkgPj0gMCAmJiB4IDwgbiAmJiB5IDwgbTsKfQoKaW50IG1haW4oKQp7CiAgICBpbnQgbiwgbTsKICAgIAogICAgd2hpbGUgKHNjYW5mKCIlZCAlZFxuIiwgJm4sICZtKSA9PSAyKQogICAgewogICAgICAgIGlmICghbiAmJiAhbSkgYnJlYWs7CiAgICAgICAgCiAgICAgICAgY2hhciBhW25dW21dID0geyAwIH07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAgIHNjYW5mKCIlcyIsIGFbaV0pOwogICAgICAgIGludCB4YSA9IC0xLCB5YSA9IC0xOwogICAgICAgIGludCB4YiA9IC0xLCB5YiA9IC0xOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGFbaV1bal0gPT0gJ2EnKSB4YSA9IGksIHlhID0gajsKICAgICAgICAgICAgICAgIGlmIChhW2ldW2pdID09ICdiJykgeGIgPSBpLCB5YiA9IGo7CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICBxdWV1ZTxzdGF0ZT4gcTsKICAgICAgICBxLnB1c2goc3QoeGEsIHlhLCB4YiwgeWIpKTsKICAgICAgICBpbnQgZFtuXVttXVtuXVttXSA9IHsgMCB9OwogICAgICAgIGNoYXIgdVtuXVttXVtuXVttXSA9IHsgMCB9OwoKICAgICAgICB3aGlsZSAoIXEuZW1wdHkoKSkKICAgICAgICB7CiAgICAgICAgICAgIHN0YXRlIHMgPSBxLmZyb250KCk7IHEucG9wKCk7CiAgICAgICAgICAgIGludCB4MSA9IHMuZmlyc3QuZmlyc3Q7CiAgICAgICAgICAgIGludCB5MSA9IHMuZmlyc3Quc2Vjb25kOwogICAgICAgICAgICBpbnQgeDIgPSBzLnNlY29uZC5maXJzdDsKICAgICAgICAgICAgaW50IHkyID0gcy5zZWNvbmQuc2Vjb25kOwoKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludCB4eDEgPSB4MSArIGR4W2ldLCB5eTEgPSB5MSArIGR5W2ldOwogICAgICAgICAgICAgICAgaWYgKGNoZWNrKHh4MSwgeXkxLCBuLCBtKSAmJiBhW3h4MV1beXkxXSAhPSAnIycpCiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA1OyBqKyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHgyID0geDIgKyBkeFtqXSwgeXkyID0geTIgKyBkeVtqXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrKHh4MiwgeXkyLCBuLCBtKSAmJiBhW3h4Ml1beXkyXSAhPSAnIycgJiYgIXVbeHgxXVt5eTFdW3h4Ml1beXkyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHh4MSA9PSB4MiAmJiB5eTEgPT0geTIpICYmICEoeHgyID09IHgxICYmIHl5MiA9PSB5MSkgJiYgISh4eDEgPT0geHgyICYmIHl5MSA9PSB5eTIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEucHVzaChzdCh4eDEsIHl5MSwgeHgyLCB5eTIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1W3h4MV1beXkxXVt4eDJdW3l5Ml0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbeHgxXVt5eTFdW3h4Ml1beXkyXSA9IGRbeDFdW3kxXVt4Ml1beTJdICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICh1W3hiXVt5Yl1beGFdW3lhXSkKICAgICAgICAgICAgcHJpbnRmKCIlZFxuIiwgZFt4Yl1beWJdW3hhXVt5YV0pOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcHV0cygiSU1QT1NTSUJMRSIpOwogICAgfQogICAgCiAgICByZXR1cm4gMDsKfQo=