#include<bits/stdc++.h>
using namespace std;
int N, M;
vector<string> grid;
vector<vector<bool>> visited;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
int minTime = INT_MAX;
bool isValid(int x, int y) {
    return x >= 0 && x < N && y >= 0 && y < M;
}
void dfs(int x, int y, int time) {
    if (grid[x][y] == 'a') {
        minTime = min(minTime, time);
        return;
    }   
    visited[x][y] = true;
    char original = grid[x][y];
    for (int i = 0; i < 4; i++) {
        int nx = x + dx[i];
        int ny = y + dy[i];
        if (isValid(nx, ny) && !visited[nx][ny]) {
            if (grid[nx][ny] == '@') {
                dfs(nx, ny, time + 1);
            } else if (grid[nx][ny] == 'x') {
                grid[nx][ny] = '.'; // Mark the guard as killed
                dfs(nx, ny, time + 2); // +1 for moving and +1 for killing the guard
                grid[nx][ny] = 'x'; // Restore the original state for backtracking
            }
        }
    }
    visited[x][y] = false; // Backtrack
    grid[x][y] = original; // Restore the original state for backtracking (optional in this case)
}
int main() {
    cin >> N >> M;
    grid.resize(N);
    visited.resize(N, vector<bool>(M, false));
    
    for (int i = 0; i < N; i++) {
        cin >> grid[i];
    }
    
    int startX, startY;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            if (grid[i][j] == 'r') {
                startX = i;
                startY = j;
                break;
            }
        }
    }
    
    dfs(startX, startY, 0);
    
    if (minTime == INT_MAX) {
        cout << "Impossible" << endl;
    } else {
        cout << minTime << endl;
    }
    
    return 0;
}
/**************************************************************
	Problem: 1901
	User: houlingqi1
	Language: C
	Result: Compile Error
****************************************************************/