#include <bits/stdc++.h>
using namespace std;
int n, s, dp[2010], a[2010], lsh[2010], idx;
vector<int> g[2010];
struct node {
  int val, fl;
};
node min(node x, node y) { return x.val < y.val ? x : y; }
int dis(int x, int y) { return min(abs(x - y), n - abs(x - y)); }
node get(int i, int pos, int x) {
  int num = g[i].size();
  if (num == 1) return (node){dis(pos, g[i][x]), 0};
  node res = (node){0x3f3f3f3f, 0};
  if (x > 0)
    res = min(
        res, (node){dis(g[i][x - 1], pos) + (n - (g[i][x] - g[i][x - 1])), -1});
  else
    res = min(res,
              (node){dis(g[i][num - 1], pos) + (g[i][num - 1] - g[i][0]), -1});
  if (x < num - 1)
    res = min(res,
              (node){dis(g[i][x + 1], pos) + (n - (g[i][x + 1] - g[i][x])), 1});
  else
    res = min(res, (node){dis(g[i][0], pos) + (g[i][num - 1] - g[i][0]), 1});
  return res;
}
void out(int i, int now, int x) {
  int o = get(i, now, x).fl, num = g[i].size(), nxt = g[i][(x + o + num) % num];
  if (abs(now - nxt) < n - abs(now - nxt))
    printf("%c%d\n", (now <= nxt) ? '+' : '-', abs(now - nxt));
  else
    printf("%c%d\n", (now >= nxt) ? '+' : '-', n - abs(now - nxt));
  if (!o) return;
  if (o == 1) {
    int ps = (x + 1) % num;
    while (ps != x) {
      if (ps < num - 1)
        printf("+%d\n", g[i][ps + 1] - g[i][ps]);
      else
        printf("+%d\n", n - (g[i][num - 1] - g[i][0]));
      ps = (ps + 1) % num;
    }
  } else {
    int ps = (x - 1 + num) % num;
    while (ps != x) {
      if (ps)
        printf("-%d\n", g[i][ps] - g[i][ps - 1]);
      else
        printf("-%d\n", n - (g[i][num - 1] - g[i][0]));
      ps = (ps - 1 + num) % num;
    }
  }
}
void print(int i, int j) {
  if (!i) {
    out(i, s, j);
    return;
  }
  for (int k = (1 - 1); k < (g[i - 1].size()); ++k)
    if (dp[g[i - 1][k]] + get(i, g[i - 1][k], j).val == dp[g[i][j]]) {
      print(i - 1, k);
      out(i, g[i - 1][k], j);
      break;
    }
}
int read() {
  int res = 0, val = 1;
  char ch;
  do {
    ch = getchar();
    if (ch == '-') val = -1;
  } while (!isdigit(ch));
  do {
    res = res * 10 + ch - '0';
    ch = getchar();
  } while (isdigit(ch));
  return res * val;
}
signed main() {
  n = read();
  s = read() - 1;
  for (int i = (1 - 1); i < (n); ++i) lsh[i] = a[i] = read();
  sort(lsh, lsh + n);
  idx = unique(lsh, lsh + n) - lsh;
  for (int i = (1 - 1); i < (n); ++i)
    a[i] = lower_bound(lsh, lsh + idx, a[i]) - lsh;
  for (int i = (1 - 1); i < (n); ++i) g[a[i]].push_back(i);
  memset(dp, 0x3f3f3f3f, sizeof(dp));
  for (int i = (1 - 1); i < (g[0].size()); ++i)
    dp[g[0][i]] = min(dp[g[0][i]], get(0, s, i).val);
  for (int i = (2 - 1); i < (idx); ++i)
    for (int j = (1 - 1); j < (g[i - 1].size()); ++j)
      for (int k = (1 - 1); k < (g[i].size()); ++k)
        dp[g[i][k]] =
            min(dp[g[i][k]], dp[g[i - 1][j]] + get(i, g[i - 1][j], k).val);
  int p = 0;
  for (int i = (1 - 1); i < (g[idx - 1].size()); ++i)
    if (dp[g[idx - 1][i]] < dp[g[idx - 1][p]]) p = i;
  printf("%d\n", dp[g[idx - 1][p]]);
  print(idx - 1, p);
}
