#include <iostream>
#include <algorithm>
#include <string>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;
vector<vector<short>> dist;
vector<vector<pair<short, short>>> parent;
int n, m;
int BFS(const vector<vector<char>> &grid, const vector<vector<bool>> &blocked,
vector<vector<short>> &dist, vector<vector<pair<short, short>>> &parent)
{
queue<pair<short, short>> q;
q.push({1, 1});
dist[1][1] = 0;
parent[1][1] = {-1, -1};
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
while (!q.empty())
{
auto [x, y] = q.front();
q.pop();
if (x == n && y == m)
return dist[x][y];
for (int d = 0; d < 4; d++)
{
int nx = x + dx[d];
int ny = y + dy[d];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m &&
!blocked[nx][ny] && dist[nx][ny] == -1)
{
dist[nx][ny] = dist[x][y] + 1;
parent[nx][ny] = {x, y};
q.push({nx, ny});
}
}
}
return -1;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
vector<vector<char>> grid(n + 2, vector<char>(m + 2));
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> grid[i][j];
}
}
vector<vector<bool>> blocked(n + 2, vector<bool>(m + 2, false));
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (grid[i][j] != '.')
{
blocked[i][j] = true;
}
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (grid[i][j] == '^')
{
for (int k = i - 1; k >= 1 && grid[k][j] == '.'; k--)
{
blocked[k][j] = true;
}
}
else if (grid[i][j] == 'v')
{
for (int k = i + 1; k <= n && grid[k][j] == '.'; k++)
{
blocked[k][j] = true;
}
}
else if (grid[i][j] == '<')
{
for (int k = j - 1; k >= 1 && grid[i][k] == '.'; k--)
{
blocked[i][k] = true;
}
}
else if (grid[i][j] == '>')
{
for (int k = j + 1; k <= m && grid[i][k] == '.'; k++)
{
blocked[i][k] = true;
}
}
}
}
if (blocked[1][1] || blocked[n][m])
{
cout << -1 << '\n';
return 0;
}
dist.assign(n + 2, vector<short>(m + 2, -1));
parent.assign(n + 2, vector<pair<short, short>>(m + 2));
int pathLength = BFS(grid, blocked, dist, parent);
if (pathLength == -1)
{
cout << -1 << '\n';
}
else
{
vector<vector<char>> ans = grid;
int x = n, y = m;
while (x != -1 && y != -1)
{
if (ans[x][y] == '.')
{
ans[x][y] = 'X';
}
auto [px, py] = parent[x][y];
x = px;
y = py;
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cout << ans[i][j];
}
cout << '\n';
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxjc3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPHZlY3RvcjxzaG9ydD4+IGRpc3Q7CnZlY3Rvcjx2ZWN0b3I8cGFpcjxzaG9ydCwgc2hvcnQ+Pj4gcGFyZW50OwppbnQgbiwgbTsKCmludCBCRlMoY29uc3QgdmVjdG9yPHZlY3RvcjxjaGFyPj4gJmdyaWQsIGNvbnN0IHZlY3Rvcjx2ZWN0b3I8Ym9vbD4+ICZibG9ja2VkLAogICAgICAgIHZlY3Rvcjx2ZWN0b3I8c2hvcnQ+PiAmZGlzdCwgdmVjdG9yPHZlY3RvcjxwYWlyPHNob3J0LCBzaG9ydD4+PiAmcGFyZW50KQp7CiAgICBxdWV1ZTxwYWlyPHNob3J0LCBzaG9ydD4+IHE7CiAgICBxLnB1c2goezEsIDF9KTsKICAgIGRpc3RbMV1bMV0gPSAwOwogICAgcGFyZW50WzFdWzFdID0gey0xLCAtMX07CgogICAgaW50IGR4W10gPSB7MSwgLTEsIDAsIDB9OwogICAgaW50IGR5W10gPSB7MCwgMCwgMSwgLTF9OwoKICAgIHdoaWxlICghcS5lbXB0eSgpKQogICAgewogICAgICAgIGF1dG8gW3gsIHldID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CgogICAgICAgIGlmICh4ID09IG4gJiYgeSA9PSBtKQogICAgICAgICAgICByZXR1cm4gZGlzdFt4XVt5XTsKCiAgICAgICAgZm9yIChpbnQgZCA9IDA7IGQgPCA0OyBkKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgbnggPSB4ICsgZHhbZF07CiAgICAgICAgICAgIGludCBueSA9IHkgKyBkeVtkXTsKCiAgICAgICAgICAgIGlmIChueCA+PSAxICYmIG54IDw9IG4gJiYgbnkgPj0gMSAmJiBueSA8PSBtICYmCiAgICAgICAgICAgICAgICAhYmxvY2tlZFtueF1bbnldICYmIGRpc3RbbnhdW255XSA9PSAtMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGlzdFtueF1bbnldID0gZGlzdFt4XVt5XSArIDE7CiAgICAgICAgICAgICAgICBwYXJlbnRbbnhdW255XSA9IHt4LCB5fTsKICAgICAgICAgICAgICAgIHEucHVzaCh7bngsIG55fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIC0xOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBjb3V0LnRpZShOVUxMKTsKCiAgICBjaW4gPj4gbiA+PiBtOwoKICAgIHZlY3Rvcjx2ZWN0b3I8Y2hhcj4+IGdyaWQobiArIDIsIHZlY3RvcjxjaGFyPihtICsgMikpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG07IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGNpbiA+PiBncmlkW2ldW2pdOwogICAgICAgIH0KICAgIH0KCiAgICB2ZWN0b3I8dmVjdG9yPGJvb2w+PiBibG9ja2VkKG4gKyAyLCB2ZWN0b3I8Ym9vbD4obSArIDIsIGZhbHNlKSk7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG07IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChncmlkW2ldW2pdICE9ICcuJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYmxvY2tlZFtpXVtqXSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG07IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChncmlkW2ldW2pdID09ICdeJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IGkgLSAxOyBrID49IDEgJiYgZ3JpZFtrXVtqXSA9PSAnLic7IGstLSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBibG9ja2VkW2tdW2pdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChncmlkW2ldW2pdID09ICd2JykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IGkgKyAxOyBrIDw9IG4gJiYgZ3JpZFtrXVtqXSA9PSAnLic7IGsrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBibG9ja2VkW2tdW2pdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChncmlkW2ldW2pdID09ICc8JykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IGogLSAxOyBrID49IDEgJiYgZ3JpZFtpXVtrXSA9PSAnLic7IGstLSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBibG9ja2VkW2ldW2tdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChncmlkW2ldW2pdID09ICc+JykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IGogKyAxOyBrIDw9IG0gJiYgZ3JpZFtpXVtrXSA9PSAnLic7IGsrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBibG9ja2VkW2ldW2tdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoYmxvY2tlZFsxXVsxXSB8fCBibG9ja2VkW25dW21dKQogICAgewogICAgICAgIGNvdXQgPDwgLTEgPDwgJ1xuJzsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBkaXN0LmFzc2lnbihuICsgMiwgdmVjdG9yPHNob3J0PihtICsgMiwgLTEpKTsKICAgIHBhcmVudC5hc3NpZ24obiArIDIsIHZlY3RvcjxwYWlyPHNob3J0LCBzaG9ydD4+KG0gKyAyKSk7CgogICAgaW50IHBhdGhMZW5ndGggPSBCRlMoZ3JpZCwgYmxvY2tlZCwgZGlzdCwgcGFyZW50KTsKCiAgICBpZiAocGF0aExlbmd0aCA9PSAtMSkKICAgIHsKICAgICAgICBjb3V0IDw8IC0xIDw8ICdcbic7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgdmVjdG9yPHZlY3RvcjxjaGFyPj4gYW5zID0gZ3JpZDsKICAgICAgICBpbnQgeCA9IG4sIHkgPSBtOwogICAgICAgIHdoaWxlICh4ICE9IC0xICYmIHkgIT0gLTEpCiAgICAgICAgewogICAgICAgICAgICBpZiAoYW5zW3hdW3ldID09ICcuJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYW5zW3hdW3ldID0gJ1gnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF1dG8gW3B4LCBweV0gPSBwYXJlbnRbeF1beV07CiAgICAgICAgICAgIHggPSBweDsKICAgICAgICAgICAgeSA9IHB5OwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgaisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3V0IDw8IGFuc1tpXVtqXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0IDw8ICdcbic7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9