#include <bits/stdc++.h>
using namespace std;
int n;
int ans[1010][1010];
char c_ans[1010][1010];
pair<int, int> p[1010][1010];
void fill(int i, int j, int ii, int jj) {
  queue<pair<int, int> > que;
  que.push({i, j});
  que.push({ii, jj});
  while (!que.empty()) {
    int x = que.front().first;
    int y = que.front().second;
    que.pop();
    if (ans[x - 1][y] == 0 && p[x - 1][y].first == -1) {
      ans[x - 1][y] = -1;
      que.push({x - 1, y});
      c_ans[x - 1][y] = 'D';
    }
    if (ans[x + 1][y] == 0 && p[x + 1][y].first == -1) {
      ans[x + 1][y] = -1;
      que.push({x + 1, y});
      c_ans[x + 1][y] = 'U';
    }
    if (ans[x][y - 1] == 0 && p[x][y - 1].first == -1) {
      ans[x][y - 1] = -1;
      que.push({x, y - 1});
      c_ans[x][y - 1] = 'R';
    }
    if (ans[x][y + 1] == 0 && p[x][y + 1].first == -1) {
      ans[x][y + 1] = -1;
      que.push({x, y + 1});
      c_ans[x][y + 1] = 'L';
    }
  }
}
int const_x[] = {0, 0, 1, -1};
int const_y[] = {1, -1, 0, 0};
char dir[] = {'L', 'R', 'U', 'D'};
void dfs(int x, int y, int cur_x, int cur_y) {
  for (int i = 0; i < 4; i++)
    if (ans[cur_x + const_x[i]][cur_y + const_y[i]] == 0 &&
        p[cur_x + const_x[i]][cur_y + const_y[i]].first == x &&
        p[cur_x + const_x[i]][cur_y + const_y[i]].second == y) {
      c_ans[cur_x + const_x[i]][cur_y + const_y[i]] = dir[i];
      ans[cur_x + const_x[i]][cur_y + const_y[i]] = ans[cur_x][cur_y];
      dfs(x, y, cur_x + const_x[i], cur_y + const_y[i]);
    }
}
int main() {
  scanf("%d", &n);
  int nr = 0;
  for (int i = 1; i <= n; i++) {
    int x, y;
    for (int j = 1; j <= n; j++) {
      c_ans[i][j] = '#';
      scanf("%d %d", &x, &y);
      p[i][j] = {x, y};
      if (i == x && j == y) c_ans[x][y] = 'X';
    }
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (c_ans[i][j] == 'X' && ans[i][j] == 0) {
        ans[i][j] = ++nr;
        dfs(i, j, i, j);
      }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (p[i][j].first == -1 && p[i][j].second == -1 && ans[i][j] == 0) {
        bool loop = false;
        int ii = -1, jj = -1;
        if (j + 1 <= n && p[i][j + 1].first == -1) {
          ii = i;
          jj = j + 1;
          ans[i][j] = -1;
          ans[i][j + 1] = -1;
          c_ans[i][j] = 'R';
          c_ans[i][j + 1] = 'L';
          loop = true;
        } else if (j - 1 >= 1 && p[i][j - 1].first == -1) {
          ii = i;
          jj = j - 1;
          ans[i][j] = -1;
          ans[i][j - 1] = -1;
          c_ans[i][j] = 'L';
          c_ans[i][j - 1] = 'R';
          loop = true;
        } else if (i + 1 <= n && p[i + 1][j].first == -1) {
          ii = i + 1;
          jj = j;
          ans[i][j] = -1;
          ans[i + 1][j] = -1;
          c_ans[i][j] = 'D';
          c_ans[i + 1][j] = 'U';
          loop = true;
        } else if (i - 1 >= 1 && p[i - 1][j].first == -1) {
          ii = i - 1;
          jj = j;
          ans[i][j] = -1;
          ans[i - 1][j] = -1;
          c_ans[i][j] = 'U';
          c_ans[i - 1][j] = 'D';
          loop = true;
        }
        if (!loop) {
          puts("INVALID");
          return 0;
        } else
          fill(i, j, ii, jj);
      }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (c_ans[i][j] == '#') {
        puts("INVALID");
        return 0;
      }
  puts("VALID");
  for (int i = 1; i <= n; i++, printf("\n"))
    for (int j = 1; j <= n; j++) printf("%c", c_ans[i][j]);
  return 0;
}
