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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public final class CodeForcestrees {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] splitt = br.readLine().split(" ");
		StringBuilder sb = new StringBuilder();
		StringBuilder finalStr = new StringBuilder();
		int mins = 0;
		int trees = Integer.parseInt(splitt[0]);
		int k = Integer.parseInt(splitt[1]);
		splitt = br.readLine().split(" ");
		int[] heights = new int[trees];
		int[] ideal = new int[trees];
		for (int i = 0; i < trees; i++) {
			heights[i] = Integer.parseInt(splitt[i]);
		}
		int j = 1;
		int temp = 999999999;
		for (j = 1; j <= 1000 - (j + k); j++) {
			mins = 0;
			sb.delete(0, sb.length());
			for (int i = 0; i < trees; i++) {
				ideal[i] = j + (i * k);
				if (heights[i] != ideal[i]) {
					mins++;
					if (heights[i] > ideal[i]) {
						sb.append("- " + (i + 1) + " "
								+ (heights[i] - ideal[i]));
						sb.append(System.getProperty("line.separator"));
					} else {
						sb.append("+ " + (i + 1) + " "
								+ (ideal[i] - heights[i]));
						sb.append(System.getProperty("line.separator"));
					}
				}
			}
			if (mins < temp) {
				finalStr.delete(0, finalStr.length());
				temp = mins;
				finalStr.append(sb);
			}
		}
		if (heights[0] + k > 1000) {
			mins = 0;
			sb.delete(0, sb.length());
			for (int i = 1; i < trees; i++) {
				if (heights[i] - heights[i - 1] != k) {
					if (heights[i] - heights[i - 1] > k) {
						sb.append("- " + (i + 1) + " "
								+ (heights[i] - (heights[i - 1] + k)));
						heights[i] = (heights[i - 1] + k);
						sb.append(System.getProperty("line.separator"));
					} else {
						sb.append("+ " + (i + 1) + " "
								+ ((heights[i - 1] + k) - heights[i]));
						heights[i] = (heights[i - 1] + k);
						sb.append(System.getProperty("line.separator"));
					}
					mins++;
				}
			}
			if (mins < temp) {
				finalStr.delete(0, finalStr.length());
				temp = mins;
				finalStr.append(sb);
			}
		}

		
		System.out.println(temp);
		System.out.println(finalStr);
	}

}
