#include <bits/stdc++.h>
using namespace std;
const int NMax = 2010;
int N, M, L;
char A[NMax][NMax];
set<pair<pair<int, int>, pair<int, int> > > S;
int check(int first, int second) {
  if (first < 0 || second < 0 || first >= N || second >= M) return 0;
  if (A[first][second] == '.') return 1;
  return 0;
}
void run(int i, int j) {
  if (!check(i, j)) return;
  if (check(i - 1, j) && !check(i + 1, j) && !check(i, j - 1) &&
      !check(i, j + 1))
    S.insert(make_pair(make_pair(i, j), make_pair(i - 1, j)));
  else if (check(i + 1, j) && !check(i - 1, j) && !check(i, j - 1) &&
           !check(i, j + 1))
    S.insert(make_pair(make_pair(i, j), make_pair(i + 1, j)));
  else if (check(i, j - 1) && !check(i - 1, j) && !check(i + 1, j) &&
           !check(i, j + 1))
    S.insert(make_pair(make_pair(i, j), make_pair(i, j - 1)));
  else if (check(i, j + 1) && !check(i - 1, j) && !check(i + 1, j) &&
           !check(i, j - 1))
    S.insert(make_pair(make_pair(i, j), make_pair(i, j + 1)));
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 0; i < N; i++) scanf("%s", A[i]);
  for (int i = 0; i < N; i++)
    for (int j = 0; j < M; j++) run(i, j);
  while (!S.empty()) {
    pair<pair<int, int>, pair<int, int> > tmp = *(S.begin());
    S.erase(tmp);
    if (!check(tmp.first.first, tmp.first.second) ||
        !check(tmp.second.first, tmp.second.second))
      continue;
    if (tmp.first.first == tmp.second.first) {
      if (tmp.first.second > tmp.second.second) swap(tmp.first, tmp.second);
      A[tmp.first.first][tmp.first.second] = '<';
      A[tmp.second.first][tmp.second.second] = '>';
    } else {
      if (tmp.first.first > tmp.second.first) swap(tmp.first, tmp.second);
      A[tmp.first.first][tmp.first.second] = '^';
      A[tmp.second.first][tmp.second.second] = 'v';
    }
    run(tmp.first.first - 1, tmp.first.second);
    run(tmp.first.first + 1, tmp.first.second);
    run(tmp.first.first, tmp.first.second - 1);
    run(tmp.first.first, tmp.first.second + 1);
    run(tmp.second.first - 1, tmp.second.second);
    run(tmp.second.first + 1, tmp.second.second);
    run(tmp.second.first, tmp.second.second - 1);
    run(tmp.second.first, tmp.second.second + 1);
  }
  int flag = 1;
  for (int i = 0; i < N; i++)
    for (int j = 0; j < M; j++)
      if (A[i][j] == '.') {
        flag = 0;
        break;
      }
  if (!flag) {
    puts("Not unique");
    getchar();
    getchar();
    return 0;
  }
  for (int i = 0; i < N; i++) printf("%s\n", A[i]);
  getchar();
  getchar();
  return 0;
}
