#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3")
long long gcd(long long x, long long y) { return y ? gcd(y, x % y) : x; }
const int MAXN = 1e3 + 10;
string s[MAXN];
int n;
pair<int, int> p[MAXN][MAXN], y[MAXN][MAXN];
int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1};
int main(int argc, char* argv[]) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  cin >> n;
  for (auto i = (0); i < (n); i++)
    for (auto j = (0); j < (n); j++) cin >> p[i][j].first >> p[i][j].second;
  for (auto i = (0); i < (n); i++) s[i] = string(n, '.');
  int valid = 1;
  for (auto i = (0); i < (n); i++)
    for (auto j = (0); j < (n); j++) {
      if (p[i][j] == make_pair(i + 1, j + 1)) {
        queue<pair<int, int> > q({{i, j}});
        s[i][j] = 'X';
        while (q.size()) {
          auto front = q.front();
          q.pop();
          for (auto ii = (0); ii < (4); ii++) {
            int tx = front.first + dx[ii];
            int ty = front.second + dy[ii];
            if (tx >= 0 && ty >= 0 && tx < n && ty < n && s[tx][ty] == '.' &&
                p[tx][ty] == make_pair(i + 1, j + 1)) {
              q.push({tx, ty});
              if (dx[ii] == 1) s[tx][ty] = 'U';
              if (dx[ii] == -1) s[tx][ty] = 'D';
              if (dy[ii] == 1) s[tx][ty] = 'L';
              if (dy[ii] == -1) s[tx][ty] = 'R';
            }
          }
        }
      } else if (p[i][j] == make_pair(-1, -1)) {
        for (auto ii = (0); ii < (4); ii++) {
          int tx = i + dx[ii];
          int ty = j + dy[ii];
          if (tx >= 0 && ty >= 0 && tx < n && ty < n &&
              p[tx][ty] == make_pair(-1, -1)) {
            if (dx[ii] == 1) {
              s[i][j] = 'D';
              s[tx][ty] = 'U';
            }
            if (dx[ii] == -1) {
              s[i][j] = 'U';
              s[tx][ty] = 'D';
            }
            if (dy[ii] == 1) {
              s[i][j] = 'R';
              s[tx][ty] = 'L';
            }
            if (dy[ii] == -1) {
              s[i][j] = 'L';
              s[tx][ty] = 'R';
            }
            break;
          }
        }
      }
    }
  for (auto i = (0); i < (n); i++)
    for (auto j = (0); j < (n); j++)
      if (s[i][j] == '.') valid = 0;
  if (!valid)
    cout << "INVALID" << '\n';
  else {
    cout << "VALID" << '\n';
    for (auto i = (0); i < (n); i++) cout << s[i] << '\n';
  }
  return 0;
}
