#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
int d[2010][2010], cd[2010][2010], dp1[2010], dp2[2010];
int nxt[2010], a[2010];
int n, s;
int gao2(int u);
int gao1(int u);
int gao2(int u) {
  int &res = dp2[u];
  if (res != -1) return res;
  if (nxt[u] == (1100000000)) return res = 0;
  res = (1100000000);
  for (int i = 0; i < n; ++i) {
    if (a[i] == nxt[u]) {
      res = min(res, gao1(i) + d[u][i]);
    }
  }
  return res;
}
int gao1(int u) {
  int &res = dp1[u];
  if (res != -1) return res;
  res = (1100000000);
  for (int dir = -1; dir <= 1; dir += 2) {
    int v = -1;
    for (int i = 1; i < n; ++i) {
      int t = (u + dir * i + n) % n;
      if (a[t] == a[u]) {
        v = t;
        break;
      }
    }
    if (v == -1)
      res = min(res, gao2(u));
    else {
      int add = dir == -1 ? cd[u][v] : cd[v][u];
      res = min(res, gao2(v) + add);
    }
  }
  return res;
}
void output1(int u);
void output2(int u);
void output2(int u) {
  int res = (1100000000);
  if (nxt[u] == (1100000000)) return;
  for (int i = 0; i < n; ++i) {
    if (a[i] == nxt[u]) {
      res = min(res, dp1[i] + d[u][i]);
    }
    if (res == dp2[u]) {
      printf("%c%d\n", (i - u + n) % n == d[u][i] ? '+' : '-', d[u][i]);
      output1(i);
      return;
    }
  }
}
void output1(int u) {
  int res = (1100000000);
  for (int dir = -1; dir <= 1; dir += 2) {
    int v = -1;
    for (int i = 1; i < n; ++i) {
      int t = (u + dir * i + n) % n;
      if (a[t] == a[u]) {
        v = t;
        break;
      }
    }
    if (v == -1)
      res = min(res, dp2[u]);
    else {
      int add = dir == -1 ? cd[u][v] : cd[v][u];
      res = min(res, dp2[v] + add);
    }
    if (res == dp1[u]) {
      int last = 0;
      dir = (dir == -1 ? 1 : -1);
      for (int i = 1; i < n; ++i) {
        int t = (u + dir * i + n) % n;
        if (a[t] == a[u] || t == v) {
          printf("%c%d\n", dir == -1 ? '-' : '+', i - last);
          last = i;
        }
      }
      if (v == -1)
        output2(u);
      else
        output2(v);
      return;
    }
  }
}
int main() {
  scanf("%d%d", &n, &s);
  --s;
  int mi = (1100000000);
  for (int i = 0; i < n; ++i) scanf("%d", &a[i]), mi = min(mi, a[i]);
  for (int i = 0; i < n; ++i) {
    nxt[i] = (1100000000);
    for (int j = 0; j < n; ++j) {
      if (a[j] > a[i]) nxt[i] = min(nxt[i], a[j]);
    }
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      d[i][j] = min(abs(i - j), n - abs(i - j));
      cd[i][j] = j >= i ? j - i : n - (i - j);
    }
  }
  memset(dp1, -1, sizeof dp1);
  memset(dp2, -1, sizeof dp2);
  int ans = (1100000000);
  for (int i = 0; i < n; ++i) {
    if (a[i] == mi) ans = min(ans, gao1(i) + d[i][s]);
  }
  printf("%d\n", ans);
  int res = (1100000000);
  for (int i = 0; i < n; ++i) {
    if (a[i] == mi) {
      res = min(res, dp1[i] + d[i][s]);
      if (res == ans) {
        printf("%c%d\n", (i - s + n) % n == d[s][i] ? '+' : '-', d[s][i]);
        output1(i);
        return 0;
      }
    }
  }
}
