#include <bits/stdc++.h>
using namespace std;
char str[2010][2010];
void go(int x, int y) {
  int l, r, u, d;
  d = (int)(str[x + 1][y] == '.');
  u = (int)(str[x - 1][y] == '.');
  r = (int)(str[x][y + 1] == '.');
  l = (int)(str[x][y - 1] == '.');
  if (!d && !u && !r && !l) {
    cout << "Not unique" << endl;
    exit(0);
  }
  if (l && !r && !u && !d) {
    str[x][y - 1] = '<';
    str[x][y] = '>';
    if (str[x][y - 2] == '.') go(x, y - 2);
    if (str[x - 1][y - 1] == '.') go(x - 1, y - 1);
    if (str[x + 1][y - 1] == '.') go(x + 1, y - 1);
  }
  if (r && !l && !u && !d) {
    str[x][y] = '<';
    str[x][y + 1] = '>';
    if (str[x][y + 2] == '.') go(x, y + 2);
    if (str[x - 1][y + 1] == '.') go(x - 1, y + 1);
    if (str[x + 1][y + 1] == '.') go(x + 1, y + 1);
  }
  if (u && !l && !r && !d) {
    str[x - 1][y] = '^';
    str[x][y] = 'v';
    if (str[x - 2][y] == '.') go(x - 2, y);
    if (str[x - 1][y + 1] == '.') go(x - 1, y + 1);
    if (str[x - 1][y - 1] == '.') go(x - 1, y - 1);
  }
  if (d && !l && !r && !u) {
    str[x][y] = '^';
    str[x + 1][y] = 'v';
    if (str[x + 2][y] == '.') go(x + 2, y);
    if (str[x + 1][y - 1] == '.') go(x + 1, y - 1);
    if (str[x + 1][y + 1] == '.') go(x + 1, y + 1);
  }
  return;
}
int main() {
  int n, m, i, j;
  for (i = 0; i < 2010; i++)
    for (j = 0; j < 2010; j++) str[i][j] = '*';
  scanf("%d%d", &n, &m);
  getchar();
  for (i = 1; i <= n; i++) {
    gets(str[i] + 1);
    str[i][m + 1] = '*';
  }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      if (str[i][j] == '.') go(i, j);
    }
  }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      if (str[i][j] == '.') {
        cout << "Not unique" << endl;
        return 0;
      }
    }
  }
  for (i = 1; i <= n; i++) {
    str[i][m + 1] = 0;
    printf("%s\n", str[i] + 1);
  }
  return 0;
}
