#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 10, MAXM = 1e7 + 10;
const int INF = INT_MAX, SINF = 0x3f3f3f3f;
const long long llINF = LLONG_MAX;
const int MOD = 1e9 + 7, mod = 998244353;
const int inv2 = 5e8 + 4;
int n;
int mp[1005][1005];
vector<pair<int, int> > vec[1005][1005];
vector<pair<int, int> > un;
char ans[1005][1005];
int dd[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int cnt;
int getdix(int x, int y) { return (x - 1) * n + y; }
bool ok(int x, int y) { return x && y && x <= n && y <= n; }
queue<pair<int, int> > q;
void bfs(int nx, int ny) {
  q.push({nx, ny});
  while (!q.empty()) {
    int x, y;
    tie(x, y) = q.front();
    q.pop();
    for (int i = 0; i < 4; i++) {
      int dx = x + dd[i][0], dy = y + dd[i][1];
      if (!ok(dx, dy)) continue;
      if (mp[dx][dy] != getdix(nx, ny)) continue;
      if (ans[dx][dy]) continue;
      if (i == 0)
        ans[dx][dy] = 'U';
      else if (i == 1)
        ans[dx][dy] = 'D';
      else if (i == 2)
        ans[dx][dy] = 'L';
      else
        ans[dx][dy] = 'R';
      q.push({dx, dy});
      cnt--;
    }
  }
  if (cnt) {
    puts("INVALID");
    exit(0);
  }
}
void solve() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      int x, y;
      scanf("%d%d", &x, &y);
      mp[i][j] = getdix(x, y);
      if (i == x && j == y) ans[i][j] = 'X';
      if (x == -1 && y == -1)
        un.push_back({i, j});
      else
        vec[x][y].push_back({i, j});
    }
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      int x = i, y = j;
      if (((int)vec[x][y].size())) {
        if (ans[x][y] == 'X') {
          cnt = ((int)vec[x][y].size()) - 1;
          bfs(x, y);
        } else {
          puts("INVALID");
          exit(0);
        }
      }
    }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if (mp[i][j] == getdix(-1, -1)) {
        if (mp[i + 1][j] == getdix(-1, -1))
          ans[i][j] = 'D';
        else if (mp[i - 1][j] == getdix(-1, -1))
          ans[i][j] = 'U';
        else if (mp[i][j + 1] == getdix(-1, -1))
          ans[i][j] = 'R';
        else if (mp[i][j - 1] == getdix(-1, -1))
          ans[i][j] = 'L';
        else {
          puts("INVALID");
          exit(0);
        }
      }
    }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (!ans[i][j]) {
        puts("INVALID");
        exit(0);
      }
  puts("VALID");
  for (int i = 1; i <= n; i++) printf("%s\n", ans[i] + 1);
}
int main() {
  solve();
  return 0;
}
