#include <bits/stdc++.h>
using namespace std;
const int oo = 0x3f3f3f3f;
const long long OO = 0x3f3f3f3f3f3f3f3fLL;
const int M7 = 1000000007;
const int M9 = 1000000009;
const long long M7L = 1000000007L;
template <typename T>
void _R(T &x) {
  cin >> x;
}
void _R(int &x) { scanf("%d", &x); }
void _R(long long &x) { scanf("%lld", &x); }
void _R(double &x) { scanf("%lf", &x); }
void _R(char &x) { scanf(" %c", &x); }
void _R(char *x) { scanf("%s", x); }
void R() {}
template <typename T, typename... U>
void R(T &head, U &...tail) {
  _R(head);
  R(tail...);
}
template <typename T>
void _W(const T &x) {
  cout << x;
}
void _W(const int &x) { printf("%d", x); }
void _W(const long long &x) { printf("%lld", x); }
template <typename T>
void _W(const vector<T> &x) {
  for (auto i = x.cbegin(); i != x.cend(); i++) {
    if (i != x.cbegin()) putchar(' ');
    _W(*i);
  }
}
void W() {}
template <typename T, typename... U>
void W(const T &head, const U &...tail) {
  _W(head);
  putchar(sizeof...(tail) ? ' ' : '\n');
  W(tail...);
}
template <typename T>
inline bool chkmax(T &a, const T &b) {
  return b > a ? a = b, true : false;
}
template <typename T>
inline bool chkmin(T &a, const T &b) {
  return b < a ? a = b, true : false;
}
int n, s;
set<pair<int, int> > cells;
int mdis(int u, int v) {
  return min((((u) - (v) + n) % n), (((v) - (u) + n) % n));
}
int main(int argc, char *argv[]) {
  int x;
  R(n, s);
  for (int i = 1; i <= int(n); i++) {
    R(x);
    cells.insert(pair<int, int>(x, i));
  }
  int last = -oo;
  vector<vector<int> > gr;
  for (auto ce : cells) {
    if (ce.first != last) {
      last = ce.first;
      gr.push_back(vector<int>());
    }
    gr.back().push_back(ce.second);
  };
  vector<int> dpe(n + 1), pree(n + 1), dps(n + 1), pres(n + 1), bak(n + 1),
      nxt(n + 1);
  for (int i = 0; i <= int(gr.size() - 1); i++) {
    for (int v : gr[i]) {
      if (i) {
        dps[v] = oo;
        for (int u : gr[i - 1]) {
          int d = dpe[u] + mdis(u, v);
          if (chkmin(dps[v], d)) {
            pres[v] = u;
          }
        }
      } else {
        dps[v] = mdis(s, v);
        pres[v] = s;
      }
    };
    int m = gr[i].size();
    for (int j = 0; j <= int(m - 1); j++) {
      int a = gr[i][(j - 1 + m) % m];
      int b = gr[i][j];
      int c = gr[i][(j + 1 + m) % m];
      bak[b] = a;
      nxt[b] = c;
      ;
      int dpa = dps[a] + (((a) - (b) + n) % n);
      ;
      int dpc = dps[c] + (((b) - (c) + n) % n);
      ;
      dpe[b] = min(dpa, dpc);
      pree[b] = dpa < dpc ? a : c;
    }
  };
  ;
  int ans = oo, cur, pre, idx = n;
  vector<int> ansp(n + 1);
  for (int u : gr.back()) {
    if (chkmin(ans, dpe[u])) {
      cur = u;
    }
  };
  ;
  ;
  ;
  while (idx > 0) {
    pre = pree[cur];
    if (bak[cur] == pre) {
      while (cur != pre) {
        ;
        ansp[idx--] = cur;
        cur = nxt[cur];
      }
    } else {
      while (cur != pre) {
        ;
        ansp[idx--] = cur;
        cur = bak[cur];
      }
    };
    ansp[idx--] = cur;
    cur = pres[cur];
  }
  W(ans);
  ansp[0] = s;
  for (int i = 1; i <= int(n); i++) {
    int d = (((ansp[i]) - (ansp[i - 1]) + n) % n);
    ;
    if (d > n - d) {
      printf("%d\n", d - n);
    } else {
      printf("+%d\n", d);
    }
  }
  return 0;
}
