#include <bits/stdc++.h>
const int N = 2000 + 5;
const int INF = 0x3f3f3f3f;
int a[N << 1];
int n, st;
int last[N], cir[N][2], cir_to[N][2], f[N], road[N][2];
int mx_ai;
int tmp[N];
void preprocess() {
  for (int i = 1; i <= n; i++) tmp[i] = a[i];
  std::sort(tmp + 1, tmp + n + 1);
  int n_ = std::unique(tmp + 1, tmp + n + 1) - tmp - 1;
  for (int i = 1; i <= n; i++)
    a[i] = std::lower_bound(tmp + 1, tmp + n_ + 1, a[i]) - tmp;
  mx_ai = n_;
}
int dis(int a, int b) { return std::min(std::abs(a - b), n - std::abs(a - b)); }
int turn(int x) { return (x <= n ? x : x - n); }
void updt(int i, int r1, int r2, int v) {
  if (f[i] > v) f[i] = v, road[i][0] = r1, road[i][1] = r2;
}
void prt(int x) { printf("%c%d\n", (x >= 0 ? '+' : '-'), std::abs(x)); }
void print_bet(int a, int b) {
  if (b < a) b += n;
  if (b - a < n - (b - a))
    prt(b - a);
  else
    prt(-(n - (b - a)));
}
void print_cir(int j, int k) {
  if (cir[j][k] == 0) return;
  int stp = 1;
  for (int i = j + (k ? -1 : 1);; i += (k ? -1 : 1)) {
    if (i < 1) i += n;
    if (i > n) i -= n;
    if (a[i] == a[j]) prt(k ? -stp : stp), stp = 0;
    stp++;
    if (i == cir_to[j][k]) break;
  }
}
void print(int x) {
  if (a[x] == 1) {
    print_bet(st, x);
    return;
  }
  int i = road[x][0], j = road[x][1];
  print(i);
  print_cir(i, j);
  print_bet(cir_to[i][j], x);
}
int main() {
  scanf("%d%d", &n, &st);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  preprocess();
  for (int i = 1; i <= n; i++) a[i + n] = a[i];
  for (int i = 1; i <= n * 2; i++) {
    if (last[a[i]]) {
      cir[turn(last[a[i]])][1] = cir[turn(i)][0] = n - (i - last[a[i]]);
      cir_to[turn(last[a[i]])][1] = turn(i);
      cir_to[turn(i)][0] = turn(last[a[i]]);
    }
    last[a[i]] = i;
  }
  for (int i = 0; i <= n + 1; i++) f[i] = (a[i] == 1 ? dis(i, st) : INF);
  for (int k = 2; k <= mx_ai; k++)
    for (int i = 1; i <= n; i++)
      if (a[i] == k)
        for (int j = 1; j <= n; j++)
          if (a[j] == a[i] - 1) {
            updt(i, j, 0, f[j] + cir[j][0] + dis(cir_to[j][0], i));
            updt(i, j, 1, f[j] + cir[j][1] + dis(cir_to[j][1], i));
          }
  int ansid = 0;
  for (int i = 1; i <= n; i++)
    if (a[i] == mx_ai &&
        (f[i] + std::min(cir[i][0], cir[i][1])) <
            (f[ansid] + std::min(cir[ansid][0], cir[ansid][1])))
      ansid = i;
  printf("%d\n", (f[ansid] + std::min(cir[ansid][0], cir[ansid][1])));
  print(ansid);
  print_cir(ansid, cir[ansid][0] < cir[ansid][1] ? 0 : 1);
  return 0;
}
