The Queen of England has n trees growing in a row in her garden. At that, the i-th (1 ≤ i ≤ n) tree from the left has height ai meters. Today the Queen decided to update the scenery of her garden. She wants the trees' heights to meet the condition: for all i (1 ≤ i < n), ai + 1 - ai = k, where k is the number the Queen chose.

Unfortunately, the royal gardener is not a machine and he cannot fulfill the desire of the Queen instantly! In one minute, the gardener can either decrease the height of a tree to any positive integer height or increase the height of a tree to any positive integer height. How should the royal gardener act to fulfill a whim of Her Majesty in the minimum number of minutes?

Input

The first line contains two space-separated integers: n, k (1 ≤ n, k ≤ 1000). The second line contains n space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 1000) — the heights of the trees in the row. 

Output

In the first line print a single integer p — the minimum number of minutes the gardener needs. In the next p lines print the description of his actions. 

If the gardener needs to increase the height of the j-th (1 ≤ j ≤ n) tree from the left by x (x ≥ 1) meters, then print in the corresponding line "+ j x". If the gardener needs to decrease the height of the j-th (1 ≤ j ≤ n) tree from the left by x (x ≥ 1) meters, print on the corresponding line "- j x".

If there are multiple ways to make a row of trees beautiful in the minimum number of actions, you are allowed to print any of them.

Examples

Input

4 1
1 2 1 5


Output

2
+ 3 2
- 4 1


Input

4 1
1 2 3 4


Output

0
#include <bits/stdc++.h>
using namespace std;
const double PI = 3.14159265358979323846;
const double SQRT2 = 1.41421356237;
const double EPS = 1e-9;
const float SQRT2F = (float)SQRT2;
const int INF = 2e9;
const long long INF64 = 1e18;
const long long LINF = INF64;
template <class T>
const T sqr(const T &x) {
  return x * x;
}
template <class T>
const T &min(const T &a, const T &b, const T &c) {
  return min(min(a, b), c);
}
template <class T>
const T &max(const T &a, const T &b, const T &c) {
  return max(max(a, b), c);
}
template <class T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
int sgn(int x) { return (x > 0) - (x < 0); }
class IManip {
 public:
  virtual void write(ostream &) const {}
};
template <class It>
class ManipRangePrinter : public IManip {
 private:
  const It b, e;

 public:
  ManipRangePrinter(It _b, It _e) : b(_b), e(_e) {}
  void write(ostream &os) const {
    if (b == e) {
      os << "<empty>";
      return;
    }
    It g = b;
    if (g != e) os << *g;
    for (++g; g != e; ++g) {
      os << " " << *g;
    }
  }
  It begin() { return b; }
  It end() { return e; }
};
ostream &operator<<(ostream &os, const IManip &man) {
  man.write(os);
  return os;
}
template <class It>
ManipRangePrinter<It> range(It b, It e) {
  return ManipRangePrinter<It>(b, e);
}
template <class T>
ostream &operator<<(ostream &os, const pair<T, T> x) {
  return os << "(" << x.first << "," << x.second << ")";
}
struct DbgStream {
  template <class T>
  DbgStream &operator<<(const T &x) {
    return *this;
  }
} z_dbg;
int n, k, a[1000], ans = INF, ansf;
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> k;
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
  }
  for (int f = 1; f <= 1000; ++f) {
    int c = 0;
    for (int i = 0; i < n; ++i) {
      if (a[i] != f + i * k) ++c;
    }
    if (ans > c) {
      ans = c;
      ansf = f;
    }
  }
  cout << ans << "\n";
  for (int i = 0; i < n; ++i) {
    if (a[i] != ansf + i * k) {
      if (a[i] < ansf + i * k)
        cout << "+ ";
      else
        cout << "- ";
      cout << i + 1 << " " << abs(a[i] - ansf - i * k) << "\n";
    }
  }
  return 0;
}
