#include <bits/stdc++.h>
using namespace std;
int n, m, s, a[2001], p[2001], f[2001], l[2001][2001], nxt[2001],
    di[2001][2001], g[2001][2001], dis[2001][2001], vis[2001];
vector<int> d[2001];
int check1(int op, int ed, int x) {
  if (ed < op) ed += n;
  if (x < op) x += n;
  return x < ed ? (x - 1) % n + 1 : op;
}
int check2(int op, int ed, int x) {
  if (ed < op) ed += n;
  if (x <= op) x += n;
  return x < ed ? (x - 1) % n + 1 : (ed - 1) % n + 1;
}
void print(int x) {
  if (x < 0)
    printf("%d\n", x);
  else
    printf("+%d\n", x);
}
void rua(int k, int cur) {
  if (k == m) return;
  int i = cur ? cur : s, cnt = 0, P = di[cur][nxt[cur]];
  if (a[i] == k + 1) print(0), vis[i] = 1;
  while (i != l[cur][nxt[cur]]) {
    i += P, i = (i + n - 1) % n + 1, cnt++;
    if (a[i] == k + 1 && !vis[i]) print(cnt * P), cnt = 0, vis[i] = 1;
  }
  P *= -1;
  while (i != nxt[cur]) {
    i += P, i = (i + n - 1) % n + 1, cnt++;
    if (a[i] == k + 1 && !vis[i]) print(cnt * P), cnt = 0;
  }
  rua(k + 1, i);
}
int main() {
  memset(f, 0x3f, sizeof(f));
  scanf("%d%d", &n, &s);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), p[i] = a[i];
  sort(p + 1, p + n + 1);
  m = unique(p + 1, p + n + 1) - p - 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (a[i] == p[j]) {
        d[j].push_back(i);
        a[i] = j;
        break;
      }
  d[0].push_back(s);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) dis[i][j] = (j + n - i) % n;
  for (int i = 0; i < m; i++) {
    int sz = d[i + 1].size();
    for (auto j : d[i])
      for (int k = 0; k < sz; k++) {
        int to = d[i + 1][k];
        int last = check1(j, to, d[i + 1][(k + sz - 1) % sz]);
        g[j][to] = dis[j][last] + dis[to][last], l[j][to] = last, di[j][to] = 1;
        last = check2(to, j, d[i + 1][(k + 1) % sz]);
        if (g[j][to] > dis[last][j] + dis[last][to])
          g[j][to] = dis[last][j] + dis[last][to], l[j][to] = last,
          di[j][to] = -1;
        if (j == to)
          g[j][to] = 2 * min(dis[j][d[i + 1][(k + sz - 1) % sz]],
                             dis[d[i + 1][(k + 1) % sz]][j]),
          g[j][to] = min(g[j][to], n);
        if (i == 0)
          g[0][to] = g[j][to], l[0][to] = l[j][to], di[0][to] = di[j][to];
      }
  }
  d[0].pop_back();
  d[0].push_back(0);
  for (auto i : d[m]) f[i] = 0;
  for (int i = m - 1; i >= 0; i--)
    for (auto j : d[i])
      for (auto k : d[i + 1])
        if (f[j] > f[k] + g[j][k]) f[j] = f[k] + g[j][k], nxt[j] = k;
  printf("%d\n", f[0]);
  rua(0, 0);
}
