#include <bits/stdc++.h>
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast", "unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
const long long inf = numeric_limits<long long>::max() / 2;
const long double eps = 1e-9;
const long double pi = acos(-1);
inline void solve(), read();
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  read();
  solve();
  return 0;
}
long long n;
vector<long long> a;
vector<string> ans;
vector<vector<long long> > comps;
long long cn = -1;
void setout(long long x, long long& j) {
  if (x < a[x]) {
    ans[j][x] = '/';
    ans[j][a[x]] = '/';
  } else if (x > a[x]) {
    ans[j][x] = '\\';
    ans[j][a[x]] = '\\';
  }
}
void iter(long long ind, long long& j) {
  vector<long long>& cs = comps[ind];
  long long x = cs[(long long)((cs).size()) - 2];
  ans[j][n - 1] = '\\';
  ans[j][a[cs.back()]] = '\\';
  for (long long i = 0; i < (long long)((cs).size()) - 1; i++) {
    ++j;
    long long x = cs[i];
    setout(x, j);
  }
  ans[j][n - 1] = '/';
  ++j;
}
void iter1(long long ind, long long& j) {
  long long x = comps[ind][0];
  setout(x, j);
  ++j;
}
void itern(long long ind, long long& j) {
  vector<long long>& cs = comps[ind];
  for (long long i = 0; i < (long long)((cs).size()) - 1; i++) {
    long long x = cs[i];
    setout(x, j);
    ++j;
  }
  ans[j][n - 1] = '/';
  ++j;
}
inline void solve() {
  vector<long long> used(n, 0);
  for (long long i = 0; i < n; i++) {
    if (used[i]) {
      continue;
    }
    used[i] = 1;
    comps.push_back({});
    if (i == n - 1) {
      cn = (long long)((comps).size()) - 1;
    }
    comps.back().push_back(i);
    long long j = i;
    while (a[j] != i) {
      j = a[j];
      used[j] = 1;
      if (j == n - 1) {
        cn = (long long)((comps).size()) - 1;
      }
      comps.back().push_back(j);
    }
    long long pos = -1;
    long long val = -inf;
    for (long long j = 0; j < (long long)((comps.back()).size()); j++) {
      if (comps.back()[j] > val) {
        pos = j;
        val = comps.back()[j];
      }
    }
    vector<long long> temp;
    for (long long j = pos + 1; j < (long long)((comps.back()).size()); j++) {
      temp.push_back(comps.back()[j]);
    }
    for (long long j = 0; j <= pos; j++) {
      temp.push_back(comps.back()[j]);
    }
    comps.back() = temp;
  }
  ans.resize(n, string(n, '.'));
  long long j = 0;
  long long ok = 1;
  if ((long long)((comps[cn]).size()) == 1) {
    iter1(cn, j);
  } else {
    ok = 0;
    itern(cn, j);
  }
  for (long long i = 0; i < (long long)((comps).size()); i++) {
    if (i == cn) {
      continue;
    }
    if ((long long)((comps[i]).size()) == 1) {
      iter1(i, j);
    } else if (cn == i) {
      ok = 0;
      itern(i, j);
    } else {
      ok = 0;
      iter(i, j);
    }
  }
  if (ok) {
    cout << n << "\n";
  } else {
    cout << n - 1 << "\n";
  }
  for (string& s : ans) {
    cout << s << "\n";
  }
}
inline void read() {
  cin >> n;
  a.resize(n);
  for (long long i = 0; i < n; i++) {
    cin >> a[i];
    --a[i];
  }
}
