#include <bits/stdc++.h>   using namespace std;   void readi(int &x) {     int v = 0, f = 1;     char c = getchar();     while (!isdigit(c) && c !=  - ) c = getchar();     if (c ==  - )       f = -1;     else       v = v * 10 + c -  0 ;     while (isdigit(c = getchar())) v = v * 10 + c -  0 ;     x = v * f;   }   void readll(long long &x) {     long long v = 0ll, f = 1ll;     char c = getchar();     while (!isdigit(c) && c !=  - ) c = getchar();     if (c ==  - )       f = -1;     else       v = v * 10 + c -  0 ;     while (isdigit(c = getchar())) v = v * 10 + c -  0 ;     x = v * f;   }   void readc(char &x) {     char c;     while ((c = getchar()) ==    )       ;     x = c;   }   void writes(string s) { puts(s.c_str()); }   void writeln() { writes(  ); }   void writei(int x) {     if (!x) putchar( 0 );     char a[25];     int top = 0;     while (x) {       a[++top] = (x % 10) +  0 ;       x /= 10;     }     while (top) {       putchar(a[top]);       top--;     }   }   void writell(long long x) {     if (!x) putchar( 0 );     char a[25];     int top = 0;     while (x) {       a[++top] = (x % 10) +  0 ;       x /= 10;     }     while (top) {       putchar(a[top]);       top--;     }   }   inline long long inc(int &x) { return ++x; }   inline long long inc(long long &x) { return ++x; }   inline long long inc(int &x, long long y) { return x += y; }   inline long long inc(long long &x, long long y) { return x += y; }   inline double inc(double &x, double y) { return x += y; }   inline long long dec(int &x) { return --x; }   inline long long dec(long long &x) { return --x; }   inline long long dec(int &x, long long y) { return x -= y; }   inline long long dec(long long &x, long long y) { return x -= y; }   inline double dec(double &x, double y) { return x -= y; }   inline long long mul(int &x) { return x = ((long long)x) * x; }   inline long long mul(long long &x) { return x = x * x; }   inline long long mul(int &x, long long y) { return x *= y; }   inline long long mul(long long &x, long long y) { return x *= y; }   inline double mul(double &x, double y) { return x *= y; }   inline long long divi(int &x) { return x = sqrt(x); }   inline long long divi(long long &x) { return x = sqrt(x); }   inline long long divi(int &x, long long y) { return x /= y; }   inline long long divi(long long &x, long long y) { return x /= y; }   inline double divi(double &x, double y) { return x /= y; }   inline long long mod(int &x, long long y) { return x %= y; }   inline long long mod(long long &x, long long y) { return x %= y; }   int dx[5] = {0, -1, 1, 0, 0}, dy[5] = {0, 0, 0, -1, 1};   string dc =  ^v<> ;   int n, m, i, j, k, dg[2222][2222];   queue<int> qx, qy;   char mp[2222][2222];   vector<pair<int, int> > add(int x, int y, int z) {     int i;     vector<pair<int, int> > ans;     if ((1) <= ((4)))       for (((i)) = (1); ((i)) <= ((4)); ((i))++) {         dg[x + dx[i]][y + dy[i]] += z;         if (dg[x + dx[i]][y + dy[i]] == 1 && mp[x + dx[i]][y + dy[i]] ==  . )           ans.push_back(make_pair(x + dx[i], y + dy[i]));       }     return ans;   }   int main() {     ios_base::sync_with_stdio(false);     ;     cin >> n >> m;     if ((1) <= ((n)))       for (((i)) = (1); ((i)) <= ((n)); ((i))++)         if ((1) <= ((m)))           for (((j)) = (1); ((j)) <= ((m)); ((j))++) cin >> mp[i][j];     if ((1) <= ((n)))       for (((i)) = (1); ((i)) <= ((n)); ((i))++)         if ((1) <= ((m)))           for (((j)) = (1); ((j)) <= ((m)); ((j))++)             if (mp[i][j] ==  . ) add(i, j, 1);     if ((1) <= ((n)))       for (((i)) = (1); ((i)) <= ((n)); ((i))++)         if ((1) <= ((m)))           for (((j)) = (1); ((j)) <= ((m)); ((j))++)             if (mp[i][j] ==  .  && dg[i][j] == 1) {               qx.push(i);               qy.push(j);             }     while (!qx.empty()) {       int x = qx.front(), y = qy.front();       qx.pop();       qy.pop();       if (mp[x][y] !=  . ) continue;       if ((1) <= ((4)))         for (((k)) = (1); ((k)) <= ((4)); ((k))++) {           if (mp[x + dx[k]][y + dy[k]] ==  . ) {             mp[x][y] = dc[(k - 1) ^ 1];             mp[x + dx[k]][y + dy[k]] = dc[(k - 1)];             vector<pair<int, int> > nxt = add(x, y, -1);             for (__typeof((nxt).begin()) it = (nxt).begin(); it != (nxt).end();                  it++) {               if (mp[it->first][it->second] ==  . ) {                 qx.push(it->first);                 qy.push(it->second);               }             }             nxt = add(x + dx[k], y + dy[k], -1);             for (__typeof((nxt).begin()) it = (nxt).begin(); it != (nxt).end();                  it++) {               if (mp[it->first][it->second] ==  . ) {                 qx.push(it->first);                 qy.push(it->second);               }             }             break;           }         }     }     if ((1) <= ((n)))       for (((i)) = (1); ((i)) <= ((n)); ((i))++)         if ((1) <= ((m)))           for (((j)) = (1); ((j)) <= ((m)); ((j))++)             if (mp[i][j] ==  . ) {               cout <<  Not unique ;               return 0;             };     if ((1) <= ((n)))       for (((i)) = (1); ((i)) <= ((n)); ((i))++) {         if ((1) <= ((m)))           for (((j)) = (1); ((j)) <= ((m)); ((j))++) cout << mp[i][j];         cout << endl;       }     return 0;   }