#include <bits/stdc++.h>
using namespace std;
char c[2010][2010];
vector<int> e[2010][2010];
int d[2010][2010];
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
char s[] = "<^>v";
int n, m;
int l[4000010][2], w, r;
bool ck(int x, int y) {
  if (x < 0 || y < 0 || x >= n || y >= m) return false;
  return c[x][y] == '.';
}
void add(int x, int y) {
  l[w][0] = x;
  l[w][1] = y;
  w++;
}
void rm(int x, int y) {
  d[x][y]--;
  for (int i = 0; i < (int)e[x][y].size(); i++) {
    int p = x + dx[e[x][y][i]];
    int q = y + dy[e[x][y][i]];
    d[p][q]--;
    if (d[p][q] == 1) {
      add(p, q);
    }
  }
}
int main() {
  int i, j, x, y, p, q;
  scanf("%d%d", &n, &m);
  for (i = 0; i < n; i++) scanf("%s", c[i]);
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      if (c[i][j] == '.') {
        if (ck(i + 1, j)) {
          e[i][j].push_back(1);
          e[i + 1][j].push_back(3);
          d[i][j]++;
          d[i + 1][j]++;
        }
        if (ck(i, j + 1)) {
          e[i][j].push_back(0);
          e[i][j + 1].push_back(2);
          d[i][j]++;
          d[i][j + 1]++;
        }
      }
    }
  }
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      if (e[i][j].size() == 1) {
        add(i, j);
      }
    }
  }
  for (r = 0; r < w; r++) {
    x = l[r][0];
    y = l[r][1];
    if (c[x][y] == '.') {
      for (i = 0; i < (int)e[x][y].size(); i++) {
        p = x + dx[e[x][y][i]];
        q = y + dy[e[x][y][i]];
        if (c[p][q] == '.') {
          c[p][q] = s[e[x][y][i] ^ 2];
          c[x][y] = s[e[x][y][i]];
          rm(p, q);
          break;
        }
      }
    }
  }
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      if (c[i][j] == '.') {
        printf("Not unique\n");
        return 0;
      }
    }
  }
  for (i = 0; i < n; i++) printf("%s\n", c[i]);
  return 0;
}
