#include <bits/stdc++.h>
#pragma GCC optimize(3, "Ofast", "inline")
using namespace std;
const int maxn = 1e3 + 5;
int n;
int sx[maxn][maxn];
int sy[maxn][maxn];
int vis[maxn][maxn];
char s[maxn][maxn];
int dn[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
set<pair<int, int> > m;
set<pair<int, int> >::iterator it;
queue<pair<int, int> > q;
int f = 1;
int main() {
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      scanf("%d %d", &sx[i][j], &sy[i][j]);
      if (sx[i][j] == -1) continue;
      m.insert({sx[i][j], sy[i][j]});
    }
  }
  for (it = m.begin(); it != m.end(); ++it) {
    while (!q.empty()) q.pop();
    int x = it->first, y = it->second;
    if (sx[x][y] != x || sy[x][y] != y) {
      f = 0;
      goto end1;
    }
    s[x][y] = 'X';
    vis[x][y] = 1;
    q.push({x, y});
    while (!q.empty()) {
      int xx = q.front().first, yy = q.front().second;
      q.pop();
      int tx = xx - 1, ty = yy;
      if (tx >= 1 && tx <= n && ty >= 1 && ty <= n && !vis[tx][ty] &&
          sx[tx][ty] == x && sy[tx][ty] == y) {
        s[tx][ty] = 'D';
        vis[tx][ty] = 1;
        q.push({tx, ty});
      }
      tx = xx + 1, ty = yy;
      if (tx >= 1 && tx <= n && ty >= 1 && ty <= n && !vis[tx][ty] &&
          sx[tx][ty] == x && sy[tx][ty] == y) {
        s[tx][ty] = 'U';
        vis[tx][ty] = 1;
        q.push({tx, ty});
      }
      tx = xx, ty = yy - 1;
      if (tx >= 1 && tx <= n && ty >= 1 && ty <= n && !vis[tx][ty] &&
          sx[tx][ty] == x && sy[tx][ty] == y) {
        s[tx][ty] = 'R';
        vis[tx][ty] = 1;
        q.push({tx, ty});
      }
      tx = xx, ty = yy + 1;
      if (tx >= 1 && tx <= n && ty >= 1 && ty <= n && !vis[tx][ty] &&
          sx[tx][ty] == x && sy[tx][ty] == y) {
        s[tx][ty] = 'L';
        vis[tx][ty] = 1;
        q.push({tx, ty});
      }
    }
  }
  for (int i = 1; i <= n; ++i) {
    s[i][n + 1] = '\0';
    for (int j = 1; j <= n; ++j) {
      if (!vis[i][j]) {
        if (sx[i][j] != -1) {
          f = 0;
          goto end1;
        }
        int ff = 0;
        int tx = i - 1, ty = j;
        if (tx >= 1 && tx <= n && ty >= 1 && ty <= n && sx[tx][ty] == -1) {
          s[i][j] = 'U';
          ff = 1;
          continue;
        }
        tx = i + 1, ty = j;
        if (tx >= 1 && tx <= n && ty >= 1 && ty <= n && sx[tx][ty] == -1) {
          s[i][j] = 'D';
          ff = 1;
          continue;
        }
        tx = i, ty = j + 1;
        if (tx >= 1 && tx <= n && ty >= 1 && ty <= n && sx[tx][ty] == -1) {
          s[i][j] = 'R';
          ff = 1;
          continue;
        }
        tx = i, ty = j - 1;
        if (tx >= 1 && tx <= n && ty >= 1 && ty <= n && sx[tx][ty] == -1) {
          s[i][j] = 'L';
          ff = 1;
          continue;
        }
        if (!ff) {
          f = 0;
          goto end1;
        }
      }
    }
  }
  printf("VALID\n");
  for (int i = 1; i <= n; ++i) {
    printf("%s\n", s[i] + 1);
  }
end1:
  if (!f) {
    printf("INVALID\n");
  }
  return 0;
}
