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.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		int k=scanner.nextInt();
		int num[]=new int[1010];
		int oldnum[]=new int[1010];
		for(int i=1;i<=n;i++){
			num[i]=scanner.nextInt();
		}
		List<NNode> minList=null;
		int minSize=1000000000;
		for(int i=1;i<=n;i++){
			oldnum[i]=num[i];
		}
		for(int s=1;s<=n;s++){
			for(int i=1;i<=n;i++){
				num[i]=oldnum[i];
			}
			boolean can=true;
			List<NNode> list=new ArrayList<NNode>();
			for(int i=s;i>=2;i--){
				if(num[i-1]!=num[i]-k){
					NNode node=new NNode();
					if(num[i]-k<=0){
						can=false;
						break;
					}
					if(num[i-1]<num[i]-k){
						node.setD('+');
					}else{
						node.setD('-');
					}
					node.setPos(i-1);
					node.setUp(Math.abs(num[i]-(num[i-1]+k)));
					list.add(node);
					num[i-1]=num[i]-k;
				}
			}
			if(!can){
				continue;
			}
			for(int i=s+1;i<=n;i++){
				if(num[i]!=num[i-1]+k){
					NNode node=new NNode();
					if(num[i]<num[i-1]+k){
						node.setD('+');
					}else{
						node.setD('-');
					}
					node.setPos(i);
					node.setUp(Math.abs(num[i]-(num[i-1]+k)));
					list.add(node);
					num[i]=num[i-1]+k;
				}
			}
			if(minSize>list.size()){
				minSize=list.size();
				minList=list;
			}
		}
		System.out.println(minList.size());
		for(NNode node:minList){
			System.out.println(node.getD()+" "+node.getPos()+" "+node.getUp());
		}
	}
}

class NNode{
	char d;
	int pos,up;
	public char getD() {
		return d;
	}
	public void setD(char d) {
		this.d = d;
	}
	public int getPos() {
		return pos;
	}
	public void setPos(int pos) {
		this.pos = pos;
	}
	public int getUp() {
		return up;
	}
	public void setUp(int up) {
		this.up = up;
	}
	
}
