#include <bits/stdc++.h>
using namespace std;
vector<long long> v[2005];
long long lst[2005], nxt[2005], n;
long long dp[2005], dis[2005][2005], a[2005], num[2005], cnt;
pair<long long, long long> from[2005];
void solve(long long x, long long y) {
  long long t = x + dis[x][y];
  if (t > n) t -= n;
  if (t == y) {
    cout << '+' << dis[x][y] << '\n';
  } else
    cout << '-' << dis[x][y] << '\n';
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long s;
  cin >> n >> s;
  long long second = s;
  vector<long long> vs;
  for (long long i = 1; i <= n; i++) cin >> a[i], vs.emplace_back(a[i]);
  for (long long i = 1; i <= n; i++) {
    for (long long j = 1; j <= n; j++) {
      dis[i][j] = min(abs(i - j), n - abs(i - j));
    }
  }
  sort(vs.begin(), vs.end());
  vs.erase(unique(vs.begin(), vs.end()), vs.end());
  for (long long i = 1; i <= n; i++)
    a[i] = lower_bound(vs.begin(), vs.end(), a[i]) - vs.begin() + 1,
    v[a[i]].emplace_back(i);
  for (long long i = 1; i <= n; i++) dp[i] = 1e18;
  long long ans;
  v[0].emplace_back(s);
  for (long long i = 1; i <= n + 1; i++) {
    if (v[i].empty()) {
      ans = v[i - 1].back();
      for (auto u : v[i - 1]) {
        if (dp[u] < dp[ans]) {
          ans = u;
        }
      }
      break;
    }
    for (long long j = 0; j < v[i].size(); j++) {
      if (j) {
        lst[v[i][j]] = v[i][j - 1];
      } else
        lst[v[i][0]] = v[i][v[i].size() - 1];
      if (j < v[i].size() - 1) {
        nxt[v[i][j]] = v[i][j + 1];
      } else
        nxt[v[i][v[i].size() - 1]] = v[i][0];
    }
    for (long long _ = 0; _ < v[i - 1].size(); _++) {
      s = v[i - 1][_];
      long long add = i > 1 ? dp[s] : 0;
      for (long long j = 0; j < v[i].size(); j++) {
        long long node = v[i][j];
        long long now = dis[s][lst[node]];
        if (lst[node] < node) {
          now += n - (node - lst[node]);
        } else
          now += lst[node] - node;
        if (now + add < dp[node]) {
          dp[node] = now + add;
          from[node] = make_pair(i > 1 ? s : 0, 0);
        }
        now = dis[s][nxt[node]];
        if (nxt[node] > node) {
          now += n - (nxt[node] - node);
        } else
          now += node - nxt[node];
        if (now + add < dp[node]) {
          dp[node] = now + add;
          from[node] = make_pair(i > 1 ? s : 0, 1);
        }
      }
    }
  }
  cout << dp[ans] << '\n';
  while (ans) {
    num[++cnt] = ans;
    ans = from[ans].first;
  }
  reverse(num + 1, num + cnt + 1);
  s = second;
  for (long long i = 1; i <= cnt; i++) {
    if (from[num[i]].second == 0) {
      solve(s, lst[num[i]]);
      long long now = lst[num[i]];
      while (now != num[i]) {
        long long gto = lst[now];
        cout << '-' << ((now - gto < 0) ? (n - (gto - now)) : (now - gto))
             << '\n';
        now = gto;
      }
    } else {
      solve(s, nxt[num[i]]);
      long long now = nxt[num[i]];
      while (now != num[i]) {
        long long gto = nxt[now];
        cout << '+' << ((gto - now < 0) ? (n - (now - gto)) : (gto - now))
             << '\n';
        now = gto;
      }
    }
    s = num[i];
  }
  return 0;
}
