```def fold(row, col, operations)

def t2b(table)
t1 = table[0...table.size/2].reverse
t2 = table[table.size/2..-1]
row = t1.size
col = t1[0].size
row.times { |r| col.times { |c| t2[r][c] = t1[r][c].reverse + t2[r][c] } }
t2
end

def b2t(table)
t2b(table.reverse).reverse
end

def l2r(table)
t2b(table.transpose).transpose
end

def r2l(table)
t2b(table.transpose.reverse).reverse.transpose
end

if row <= 1                          ||
col <= 1                          ||
2**operations.size != row * col   ||
operations =~ /[^TBLR]/           ||
2**operations.gsub(/[LR]/,'').size != row
raise "Error: parameters are not correct."
end

index = 0
table = Array.new(row) { Array.new(col) { [index += 1] } }

operations.each_byte do |op|
table = case op
when ?T : t2b(table)
when ?B : b2t(table)
when ?L : l2r(table)
when ?R : r2l(table)
else raise "Error: Invalid fold operation."
end
end

table[0][0]
end

#========================================================================#

def check_fold(row, col, result)

# find all combinations with binary 0 for row and 1 for column operation
def all_orders(r, c) #
return [2**c - 1] if (r <= 0)  # c bits of 1 is 2**c-1
return [0]        if (c <= 0)  # r bits of 0 is 0
table = []
all_orders(r-1,c).each { |t| table << ((t << 1) + 0) }
all_orders(r,c-1).each { |t| table << ((t << 1) + 1) }
table
end

if row <= 1                                     ||
col <= 1                                     ||
row * col != result.size                     ||
2 ** (Math.log(row)/Math.log(2)).to_i != row ||
2 ** (Math.log(col)/Math.log(2)).to_i != col
raise "Error: Parameters are not correct."
end

r = Integer(Math.log(row) / Math.log(2))
c = Integer(Math.log(col) / Math.log(2))
all_rc_orders = all_orders(r,c)

row.times do |tb_operation|
col.times do |lr_operation|
all_rc_orders.each do |order|
operations = ''
tb_op = tb_operation
lr_op = lr_operation
(r+c).times do
if (order & 1 == 0)
operations += (tb_op & 1 == 0) ? 'T' : 'B'
tb_op >>= 1
else
operations += (lr_op & 1 == 0) ? 'L' : 'R'
lr_op >>= 1
end
order >>= 1
end
return operations if fold(row, col, operations) == result
end
end
end
"No solution."
end

```