#include <bits/stdc++.h>
using namespace std;
template <class T>
using V = vector<T>;
template <class T>
using VV = V<V<T>>;
constexpr long long TEN(int n) { return (n == 0) ? 1 : 10 * TEN(n - 1); }
template <class T, class U>
void chmin(T& t, const U& u) {
  if (t > u) t = u;
}
template <class T, class U>
void chmax(T& t, const U& u) {
  if (t < u) t = u;
}
template <class T, class U>
ostream& operator<<(ostream& os, const pair<T, U>& p) {
  os << "(" << p.first << "," << p.second << ")";
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  os << "{";
  for (int i = 0; i < (v.size()); i++) {
    if (i) os << ",";
    os << v[i];
  }
  os << "}";
  return os;
}
char ans[1010][1010];
int main() {
  int n;
  cin >> n;
  V<int> p(n), rp(n);
  for (int i = 0; i < (n); i++) {
    cin >> p[i];
    --p[i];
    rp[p[i]] = i;
  }
  for (int i = 0; i < (n); i++)
    for (int j = 0; j < (n); j++) ans[i][j] = '.';
  {
    bool all = 1;
    for (int i = 0; i < (n); i++)
      if (p[i] != i) {
        all = 0;
      }
    if (all) {
      printf("%d\n", n);
      for (int i = 0; i < (n); i++) printf("%s\n", ans[i]);
      return 0;
    }
  }
  printf("%d\n", n - 1);
  int l = -1;
  for (int i = 0; i < (n); i++)
    if (p[i] != i) {
      l = i;
      break;
    }
  V<int> used(n);
  int now = 0;
  {
    V<int> vec;
    int x = l;
    while (true) {
      vec.push_back(x);
      used[x] = 1;
      x = rp[x];
      if (x == l) break;
    }
    int sz = vec.size();
    for (int i = sz - 1; i >= 1; --i) {
      if (vec[i - 1] > vec[i]) {
        ans[now][vec[i - 1]] = '/';
        ans[now][vec[i]] = '/';
      } else {
        ans[now][vec[i - 1]] = '\\';
        ans[now][vec[i]] = '\\';
      }
      now++;
    }
  }
  for (int i = 0; i < (n); i++)
    if (p[i] != i && !used[i]) {
      V<int> vec;
      int x = i;
      while (true) {
        vec.push_back(x);
        used[x] = 1;
        x = p[x];
        if (x == i) break;
      }
      int p = min_element((vec).begin(), (vec).end()) - vec.begin();
      int sz = vec.size();
      {
        V<int> nx;
        for (int i = 0; i < (sz); i++) {
          nx.push_back(vec[p]);
          p++;
          if (p == sz) p = 0;
        }
        vec = nx;
      }
      ans[now][l] = '/';
      ans[now][vec[0]] = '/';
      for (int i = 1; i < sz; ++i) {
        if (vec[i - 1] < vec[i]) {
          ans[now][vec[i - 1]] = '/';
          ans[now][vec[i]] = '/';
        } else {
          ans[now][vec[i - 1]] = '\\';
          ans[now][vec[i]] = '\\';
        }
        now++;
      }
      ans[now][l] = '\\';
      ans[now][vec.back()] = '\\';
      now++;
    }
  for (int i = 0; i < (n); i++) printf("%s\n", ans[i]);
  return 0;
}
