class Generator
	def initialize
		@ops = []
	end

	def lt(i, j, k)
		@ops << [:<, i, j, k]
	end

	def add(i, j, k)
		@ops << [:+, i, j, k]
	end

	def to_s
		str = ""
		str << size.to_s + "\n"
		@ops.each do |(op, i, j, k)|
			str << "#{op} #{i} #{j} #{k}\n"
		end
		str
	end

	def size
		@ops.size
	end
end

gen = Generator.new

=begin
予約領域：
0..2 : 入出力
4 : 予約
5..9: 汎用レジスタ
10..39 : 2^n-1 (定数)
40..69 : 2^n-1 (入力Aを分解するため)
70..99 : 2^n-1 (入力Bを分解するため)
100..129 : 入力Aの分解
130..159 : 入力Bの分解
200..258 : 分解の積
=end

# 1をつくる
gen.add 0, 1, 3
gen.lt 4, 3, 11

# 2**2-1から2**29-1までつくる
(2..29).each do |i|
	gen.add 10+i-1, 10+i-1, 10+i
	gen.add 10+i, 11, 10+i
end

# コピー
(0..29).each do |i|
	gen.add 10+i, 10, 40+i
end

# コピー
(0..29).each do |i|
	gen.add 10+i, 10, 70+i
end

# Aを分解
29.downto(0) do |i|
	29.downto(i+1) do |j|
		gen.lt 10, 100+j, 5
		j.times do
			gen.add 5, 5, 5
		end
		gen.add 5, 40+i, 40+i
	end
	gen.lt 40+i, 0, 100+i
end

# Bを分解
29.downto(0) do |i|
	29.downto(i+1) do |j|
		gen.lt 10, 130+j, 5
		j.times do
			gen.add 5, 5, 5
		end
		gen.add 5, 70+i, 70+i
	end
	gen.lt 70+i, 1, 130+i
end

# 掛け算
(0..29*2).each do |ij|
	([0, ij-29].max..[ij, 29].min).each do |i|
		j = ij - i
		gen.add 100+i, 130+j, 5
		gen.lt 11, 5, 5
		gen.add 5, 200+ij, 200+ij
	end
end

# 復元
(0..29*2).each do |i|
	i.times do
		gen.add 200+i, 200+i, 200+i
	end
	gen.add 200+i, 2, 2
end

STDERR.puts "%d lines" % gen.size
puts gen.to_s