#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXN = 1000;
int n;
int target[MAXN];
char g[MAXN][MAXN + 1];
int targetedby[MAXN];
bool done[MAXN];
int solve() {
  for (int x = (0); x < (n); ++x) {
    for (int y = (0); y < (n); ++y) g[x][y] = '.';
    g[x][n] = '\0';
  }
  bool identity = true;
  for (int i = (0); i < (n); ++i)
    if (target[i] != i) identity = false;
  if (identity) return n;
  for (int i = (0); i < (n); ++i) targetedby[target[i]] = i;
  int last = n - 1;
  while (last >= 0 && target[last] == last) --last;
  assert(last >= 0);
  int row = n - 1;
  for (int i = (0); i < (n); ++i) done[i] = target[i] == i;
  {
    int to = targetedby[last];
    done[to] = true;
    while (!done[targetedby[to]]) {
      int from = targetedby[to];
      if (from < to)
        g[row][from] = g[row][to] = '/';
      else if (from > to)
        g[row][from] = g[row][to] = '\\';
      else
        assert(false);
      done[from] = true, to = from, --row;
    }
  }
  for (int i = n - 1; i >= 0; --i)
    if (!done[i]) {
      int to = i;
      while (!done[targetedby[to]]) {
        int from = targetedby[to];
        int realfrom = from != i ? from : last;
        if (realfrom < to)
          g[row][realfrom] = g[row][to] = '/';
        else if (realfrom > to)
          g[row][realfrom] = g[row][to] = '\\';
        else
          assert(false);
        if (to == i) {
          assert(from < to);
          g[row][last] = '/';
        }
        done[from] = true, to = from, --row;
      }
    }
  return n - 1;
}
void run() {
  scanf("%d", &n);
  for (int i = (0); i < (n); ++i) scanf("%d", &target[i]), --target[i];
  printf("%d\n", solve());
  for (int x = (0); x < (n); ++x) printf("%s\n", g[x]);
}
const int DX[] = {-1, 0, +1, 0}, DY[] = {0, -1, 0, +1};
int walk(int x, int y, int k) {
  while (true) {
    x += DX[k], y += DY[k];
    if (x < 0 || x >= n || y < 0 || y >= n) break;
    if (g[x][y] == '\\')
      k ^= 1;
    else if (g[x][y] == '/')
      k = 3 - k;
  }
  return x == -1 ? y : -1;
}
void stress() {
  for (int rep = (0); rep < (10000); ++rep) {
    n = MAXN;
    for (int i = (0); i < (n); ++i) target[i] = i;
    for (int i = (0); i < (n); ++i) {
      int idx = rand() % (i + 1);
      swap(target[i], target[idx]);
    }
    int have = solve();
    int cnt = 0;
    for (int i = (0); i < (n); ++i)
      if (walk(n, i, 0) == target[i]) ++cnt;
    if (have == cnt) {
      printf(".");
      continue;
    }
    printf("err\n");
    for (int i = (0); i < (n); ++i) {
      if (i != 0) printf(" ");
      printf("%d", target[i]);
    }
    puts("");
    printf("have=%d cnt=%d\n", have, cnt);
    for (int x = (0); x < (n); ++x) printf("%s\n", g[x]);
    exit(0);
  }
}
int main() {
  run();
  return 0;
}
