#include <bits/stdc++.h>   using namespace std;   struct cell {     bool up, down, right, left;     int degree;     cell() { up = down = left = right = degree = 0; }     void reset() { up = down = left = right = degree = 0; }   };   struct qcell {     int x, y, degree;     qcell() {       x = y = -1;       degree = 0;     }     qcell(int xx, int yy, int deg) {       x = xx;       y = yy;       degree = deg;     }   };   char pitch[2001][2001];   cell info[2001][2001];   int n, m;   int empty_cells = 0;   bool update(int x, int y) {     int degree = 0;     if (x >= 0 && x < n && y >= 0 && y < m) {       degree = info[x][y].degree;       if (pitch[x][y] !=  . )         info[x][y].reset();       else {         info[x][y].up = (x - 1 >= 0 && pitch[x - 1][y] ==  . );         info[x][y].down = (x + 1 < n && pitch[x + 1][y] ==  . );         info[x][y].left = (y - 1 >= 0 && pitch[x][y - 1] ==  . );         info[x][y].right = (y + 1 < m && pitch[x][y + 1] ==  . );         info[x][y].degree = (info[x][y].up + info[x][y].down + info[x][y].left +                              info[x][y].right);       }     }     return degree != info[x][y].degree;   }   void do_push(int x, int y, queue<qcell> &q) {     if (x >= 0 && x < n && y >= 0 && y < m)       if (pitch[x][y] ==  . )         if (info[x][y].degree == 1) q.push(qcell(x, y, 1));   }   void occupy(int x, int y, queue<qcell> &q) {     int xx = x, yy = y;     char dir =  U ;     if (info[x][y].down) dir =  D ;     if (info[x][y].left) dir =  L ;     if (info[x][y].right) dir =  R ;     if (dir ==  U ) {       pitch[x][y] =  v ;       pitch[x - 1][y] =  ^ ;       xx = x - 1;     } else if (dir ==  D ) {       pitch[x][y] =  ^ ;       pitch[x + 1][y] =  v ;       xx = x + 1;     } else if (dir ==  L ) {       pitch[x][y] =  > ;       pitch[x][y - 1] =  < ;       yy = y - 1;     } else {       pitch[x][y] =  < ;       pitch[x][y + 1] =  > ;       yy = y + 1;     }     update(x, y);     update(xx, yy);     if (do_push) {       if (update(x - 1, y)) do_push(x - 1, y, q);       if (update(x + 1, y)) do_push(x + 1, y, q);       if (update(x, y - 1)) do_push(x, y - 1, q);       if (update(x, y + 1)) do_push(x, y + 1, q);       if (update(xx - 1, yy)) do_push(xx - 1, yy, q);       if (update(xx + 1, yy)) do_push(xx + 1, yy, q);       if (update(xx, yy - 1)) do_push(xx, yy - 1, q);       if (update(xx, yy + 1)) do_push(xx, yy + 1, q);     }     empty_cells -= 2;   }   int main() {     cin >> n >> m;     for (int i = 0; i < n; i++)       for (int j = 0; j < m; j++) {         cin >> pitch[i][j];         if (pitch[i][j] ==  . ) empty_cells++;       }     queue<qcell> q;     for (int i = 0; i < n; i++)       for (int j = 0; j < m; j++) {         update(i, j);         if (info[i][j].degree == 1) q.push(qcell(i, j, info[i][j].degree));       }     bool unique_sol = 1;     while (1) {       if (q.empty()) break;       qcell f = q.front();       q.pop();       if (info[f.x][f.y].degree == 0) {         if (pitch[f.x][f.y] ==  . ) {           unique_sol = false;           break;         }       } else         occupy(f.x, f.y, q);     }     if (unique_sol)       if (empty_cells != 0) unique_sol = 0;     if (!unique_sol)       cout <<  Not unique  << endl;     else       for (int i = 0; i < n; i++) {         for (int j = 0; j < m; j++) cout << pitch[i][j];         cout << endl;       }     return 0;   }