#include <bits/stdc++.h>
using namespace std;
int n, m, nrElem, a[2010][2010], vec[2010][2010], viz[2010][2010];
int dirLin[] = {-1, 1, 0, 0}, dirCol[] = {0, 0, -1, 1};
char s[2010], fin[2010][2010];
struct elem {
  int lin, col;
} nod, vecin, p;
vector<elem> v;
queue<elem> q;
void afis() {
  int i, j;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++)
      if (!fin[i][j])
        cout << '*';
      else
        cout << fin[i][j];
    cout << '\n';
  }
  cout << '\n';
}
int main() {
  int i, j, k;
  cin >> n >> m;
  for (i = 1; i <= n; i++) {
    cin >> s;
    for (j = 0; j < m; j++)
      if (s[j] == '.')
        a[i][j + 1] = 1;
      else
        nrElem++;
  }
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++)
      if (a[i][j])
        for (k = 0; k < 4; k++) vec[i][j] += a[i + dirLin[k]][j + dirCol[k]];
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++)
      if (vec[i][j] == 1) {
        p.lin = i;
        p.col = j;
        q.push(p);
      }
  if (nrElem == n * m) {
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= m; j++) cout << '*';
      cout << '\n';
    }
    return 0;
  }
  if (q.empty()) {
    cout << "Not unique";
    return 0;
  }
  while (!q.empty()) {
    nod = q.front();
    q.pop();
    if (viz[nod.lin][nod.col] || vec[nod.lin][nod.col] != 1) continue;
    for (k = 0; k < 4; k++)
      if (a[nod.lin + dirLin[k]][nod.col + dirCol[k]]) break;
    vecin.lin = nod.lin + dirLin[k];
    vecin.col = nod.col + dirCol[k];
    nrElem += 2;
    a[nod.lin][nod.col] = 0;
    a[vecin.lin][vecin.col] = 0;
    if (nod.lin == vecin.lin - 1) {
      fin[nod.lin][nod.col] = '^';
      fin[vecin.lin][vecin.col] = 'v';
    } else if (nod.lin == vecin.lin + 1) {
      fin[nod.lin][nod.col] = 'v';
      fin[vecin.lin][vecin.col] = '^';
    } else if (nod.col == vecin.col - 1) {
      fin[nod.lin][nod.col] = '<';
      fin[vecin.lin][vecin.col] = '>';
    } else if (nod.col == vecin.col + 1) {
      fin[nod.lin][nod.col] = '>';
      fin[vecin.lin][vecin.col] = '<';
    }
    viz[nod.lin][nod.col] = 1;
    viz[vecin.lin][vecin.col] = 1;
    for (k = 0; k < 4; k++)
      if (a[vecin.lin + dirLin[k]][vecin.col + dirCol[k]]) {
        vec[vecin.lin + dirLin[k]][vecin.col + dirCol[k]]--;
        if (vec[vecin.lin + dirLin[k]][vecin.col + dirCol[k]] == 1) {
          p.lin = vecin.lin + dirLin[k];
          p.col = vecin.col + dirCol[k];
          q.push(p);
        }
      }
  }
  if (nrElem < n * m) {
    cout << "Not unique";
    return 0;
  }
  afis();
}
