I wonder for 4x4 the total solution is 16 * 4! = 384 My solution about check_fold is try to find all combinations possible. Below is modified version of my check_fold, it will print out all possible combinations and total count number. However I found for 4x4 there is only 96 possible not 384. Can someone tell me that I am wrong ( missing some combination ) or the previous math formula is not correct ? Thanks, 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 =begin if row <= 0 || col <= 0 || 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 =end r = Integer(Math.log(row) / Math.log(2)) c = Integer(Math.log(col) / Math.log(2)) all_rc_orders = all_orders(r,c) count = 0 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 puts operations count += 1 # return operations if fold(row, col, operations) == result end end end p count end check_fold(4,4, nil) #==================================# The output: TTLL TLTL TLLT LTTL LTLT LLTT TTRL TRTL TRLT RTTL RTLT RLTT TTLR TLTR TLRT LTTR LTRT LRTT TTRR TRTR TRRT RTTR RTRT RRTT BTLL BLTL BLLT LBTL LBLT LLBT BTRL BRTL BRLT RBTL RBLT RLBT BTLR BLTR BLRT LBTR LBRT LRBT BTRR BRTR BRRT RBTR RBRT RRBT TBLL TLBL TLLB LTBL LTLB LLTB TBRL TRBL TRLB RTBL RTLB RLTB TBLR TLBR TLRB LTBR LTRB LRTB TBRR TRBR TRRB RTBR RTRB RRTB BBLL BLBL BLLB LBBL LBLB LLBB BBRL BRBL BRLB RBBL RBLB RLBB BBLR BLBR BLRB LBBR LBRB LRBB BBRR BRBR BRRB RBBR RBRB RRBB 96 -- www.doublegifts.com