#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
struct point {
  point(int xx, int yy) : x(xx), y(yy) {}
  int x, y;
};
int n, m;
char a[N][N];
queue<point> q;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
long long pp;
bool uniq(int xx, int yy) {
  if (a[xx][yy] != '.') {
    return false;
  }
  int counter = 0;
  for (int i = 0; i < 4; ++i) {
    int x = xx + dx[i];
    int y = yy + dy[i];
    if (a[x][y] == '.') {
      ++counter;
    }
  }
  return (counter == 1);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> m;
  for (int i = 0; i <= n + 1; ++i) {
    for (int j = 0; j <= m + 1; ++j) {
      if (i == 0 || j == 0 || i == n + 1 || j == m + 1) {
        a[i][j] = '*';
        continue;
      }
      cin >> a[i][j];
      if (a[i][j] == '.') {
        ++pp;
      }
    }
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      if (a[i][j] == '*') {
        continue;
      }
      int counter = 0;
      if (a[i][j + 1] == '.') {
        ++counter;
      }
      if (a[i][j - 1] == '.') {
        ++counter;
      }
      if (a[i - 1][j] == '.') {
        ++counter;
      }
      if (a[i + 1][j] == '.') {
        ++counter;
      }
      if (counter == 0) {
        cout << "Not unique";
        return 0;
      }
      if (counter == 1) {
        q.push(point(i, j));
      }
    }
  }
  while (true) {
    if (q.empty()) {
      break;
    }
    point cur = q.front();
    q.pop();
    if (a[cur.x][cur.y] != '.') {
      continue;
    }
    if (!uniq(cur.x, cur.y)) {
      cout << "Not unique";
      return 0;
    }
    int xx = cur.x;
    int yy = cur.y;
    for (int i = 0; i < 4; ++i) {
      xx += dx[i];
      yy += dy[i];
      if (a[xx][yy] == '.') {
        break;
      }
      xx -= dx[i];
      yy -= dy[i];
    }
    if (yy == cur.y) {
      if (xx < cur.x) {
        a[cur.x][cur.y] = 'v';
        a[xx][yy] = '^';
      } else {
        a[xx][yy] = 'v';
        a[cur.x][cur.y] = '^';
      }
    }
    if (xx == cur.x) {
      if (yy < cur.y) {
        a[cur.x][cur.y] = '>';
        a[xx][yy] = '<';
      } else {
        a[cur.x][cur.y] = '<';
        a[xx][yy] = '>';
      }
    }
    pp -= 2;
    for (int i = 0; i < 4; ++i) {
      if (uniq(xx + dx[i], yy + dy[i])) {
        q.push(point(xx + dx[i], yy + dy[i]));
      }
    }
  }
  if (pp > 0) {
    cout << "Not unique";
    return 0;
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      cout << a[i][j];
    }
    cout << endl;
  }
  return 0;
}
