#include <bits/stdc++.h>
using namespace std;
const long long N = 2e3 + 7;
const double eps = 1e-6;
int dp[N][N];
pair<int, int> cw[N], ccw[N];
vector<int> occ[N];
int ID = 0;
int n;
int solve(int id, int index) {
  if (id == ID) {
    return 0;
  }
  int& ans = dp[id][index];
  if (ans != -1) return ans;
  ans = 1e9;
  for (auto i : occ[id]) {
    int costStart = min(abs(index - i), n - abs(index - i));
    int cwCost = cw[i].first, cwEnd = cw[i].second;
    int ccwCost = ccw[i].first, ccwEnd = ccw[i].second;
    ans = min(ans, costStart + cwCost + solve(id + 1, cwEnd));
    ans = min(ans, costStart + ccwCost + solve(id + 1, ccwEnd));
  }
  return ans;
}
vector<pair<char, pair<int, int>>> cons;
void construct(int id, int index) {
  if (id == ID) {
    return;
  }
  for (int i = 0; i < occ[id].size(); i++) {
    int costStart = min(abs(index - occ[id][i]), n - abs(index - occ[id][i]));
    int cwCost = cw[occ[id][i]].first, cwEnd = cw[occ[id][i]].second;
    int ccwCost = ccw[occ[id][i]].first, ccwEnd = ccw[occ[id][i]].second;
    int ans1 = costStart + cwCost + solve(id + 1, cwEnd);
    int ans2 = costStart + ccwCost + solve(id + 1, ccwEnd);
    if (ans1 == solve(id, index)) {
      if (occ[id][i] > index) {
        int cost1 = abs(index - occ[id][i]), cost2 = n - cost1;
        if (cost1 < cost2) {
          cons.push_back({'+', {index, occ[id][i]}});
        } else {
          cons.push_back({'-', {index, occ[id][i]}});
        }
      } else {
        int cost1 = abs(index - occ[id][i]), cost2 = n - cost1;
        if (cost1 < cost2) {
          cons.push_back({'-', {index, occ[id][i]}});
        } else {
          cons.push_back({'+', {index, occ[id][i]}});
        }
      }
      int cntr = 0, curr = i;
      while (cntr < occ[id].size() - 1) {
        int next = (curr + 1) % occ[id].size();
        cons.push_back({'+', {occ[id][curr], occ[id][next]}});
        cntr++;
        curr = next;
      }
      construct(id + 1, cwEnd);
      break;
    } else if (ans2 == solve(id, index)) {
      if (occ[id][i] > index) {
        int cost1 = abs(index - occ[id][i]), cost2 = n - cost1;
        if (cost1 < cost2) {
          cons.push_back({'+', {index, occ[id][i]}});
        } else {
          cons.push_back({'-', {index, occ[id][i]}});
        }
      } else {
        int cost1 = abs(index - occ[id][i]), cost2 = n - cost1;
        if (cost1 < cost2) {
          cons.push_back({'-', {index, occ[id][i]}});
        } else {
          cons.push_back({'+', {index, occ[id][i]}});
        }
      }
      int cntr = 0, curr = i;
      while (cntr < occ[id].size() - 1) {
        int next = (curr - 1 + occ[id].size()) % occ[id].size();
        cons.push_back({'-', {occ[id][curr], occ[id][next]}});
        cntr++;
        curr = next;
      }
      construct(id + 1, ccwEnd);
      break;
    }
  }
}
int main() {
  int s;
  cin >> n >> s;
  map<int, int> mp;
  vector<int> v(n);
  for (int i = 0; i < n; i++) {
    cin >> v[i];
    mp[v[i]] = 0;
  }
  for (auto& i : mp) {
    i.second = ID++;
  }
  for (int i = 0; i < n; i++) {
    occ[mp[v[i]]].push_back(i);
  }
  for (int id = 0; id < ID; id++) {
    int m = occ[id].size();
    for (int i = 0; i < m; i++) {
      int prev = occ[id][(i - 1 + m) % m], next = occ[id][(i + 1) % m];
      int costcw, costccw;
      if (i == 0) {
        costcw = abs(prev - occ[id][i]);
        costccw = n - abs(next - occ[id][i]);
      } else if (i == m - 1) {
        costcw = n - abs(prev - occ[id][i]);
        costccw = abs(next - occ[id][i]);
      } else {
        costcw = n - abs(prev - occ[id][i]);
        costccw = n - abs(next - occ[id][i]);
      }
      cw[occ[id][i]] = {costcw, prev};
      ccw[occ[id][i]] = {costccw, next};
    }
  }
  memset(dp, -1, sizeof dp);
  cout << solve(0, s - 1) << '\n';
  construct(0, s - 1);
  vector<pair<char, int>> ans_final;
  for (auto i : cons) {
    if (i.first == '+') {
      if (i.second.first < i.second.second) {
        ans_final.push_back({'+', abs(i.second.second - i.second.first)});
      } else {
        ans_final.push_back({'+', n - abs(i.second.second - i.second.first)});
      }
    } else {
      if (i.second.first < i.second.second) {
        ans_final.push_back({'-', n - abs(i.second.second - i.second.first)});
      } else {
        ans_final.push_back({'-', abs(i.second.second - i.second.first)});
      }
    }
  }
  for (auto i : ans_final) {
    cout << i.first << i.second << '\n';
  }
}
