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.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.InputMismatchException;
	
	public class CF {
		public static void main(String[] args) {
			FasterScanner sc = new FasterScanner();
			PrintWriter out = new PrintWriter(System.out);
			int N = sc.nextInt();
			int K = sc.nextInt();
			
			int[] array = new int[N];
			for(int a=0;a<N;a++)array[a]=sc.nextInt();
			
			int count= Integer.MAX_VALUE;
			StringBuilder ans = new StringBuilder();
			for(int s=1;s<=1000;s++){
				int many = 0;
				int goal = s;

				StringBuilder temp = new StringBuilder();
				for(int a=0;a<N;a++){
					if(array[a]==goal)
						many++;
					else{
						String sign = "+ ";
						if(array[a]>goal)sign = "- ";
						temp.append(sign+""+(a+1)+" "+(Math.abs(array[a]-goal)+"\n"));
					}
					goal+=K;
				}
				if(count>N-many){
					count = N-many;
					ans=temp;
				}
			}
			
			out.println(count);
			out.println(ans);

			out.close();
		}
		

	
		static class FasterScanner {
			private InputStream stream;
			private byte[] buf = new byte[1024];
			private int curChar;
			private int numChars;
	
			public FasterScanner() {
				stream = System.in;
				// stream = new FileInputStream(new File("dec.in"));
	
			}
	
			int read() {
				if (numChars == -1)
					throw new InputMismatchException();
				if (curChar >= numChars) {
					curChar = 0;
					try {
						numChars = stream.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					}
					if (numChars <= 0)
						return -1;
				}
				return buf[curChar++];
			}
	
			boolean isSpaceChar(int c) {
				return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
			}
	
			boolean isEndline(int c) {
				return c == '\n' || c == '\r' || c == -1;
			}
	
			int nextInt() {
				return Integer.parseInt(next());
			}
	
			long nextLong() {
				return Long.parseLong(next());
			}
	
			double nextDouble() {
				return Double.parseDouble(next());
			}
	
			String next() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isSpaceChar(c));
				return res.toString();
			}
	
			String nextLine() {
				int c = read();
				while (isEndline(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isEndline(c));
				return res.toString();
			}
	
		}
	
	}