#!/usr/bin/env ruby
#The recursive function to find out all the expressions which evaluate to a given value
#The technique used is "backtracking"
def findExpr(s, expr, k)
if s.length != 0
expr += s[0].chr
val = eval(expr)
if val == k && s.length == 1
print expr, "\n"
elsif val < k
#The operations supported are '*', '+' and '.'
#where '.' is simple concatenation of the digits
findExpr(s[1..-1], expr + '*', k)
findExpr(s[1..-1], expr + '+', k)
findExpr(s[1..-1], expr, k)
end
end
end
findExpr("123456789", "", 2097)
stringy="123456789"
subs = stringy[1..-1];
puts #{subs}
IyEvdXNyL2Jpbi9lbnYgcnVieQoKI1RoZSByZWN1cnNpdmUgZnVuY3Rpb24gdG8gZmluZCBvdXQgYWxsIHRoZSBleHByZXNzaW9ucyB3aGljaCBldmFsdWF0ZSB0byBhIGdpdmVuIHZhbHVlCiNUaGUgdGVjaG5pcXVlIHVzZWQgaXMgImJhY2t0cmFja2luZyIKCmRlZiBmaW5kRXhwcihzLCBleHByLCBrKQogICAgaWYgcy5sZW5ndGggIT0gMAogICAgICAgIGV4cHIgKz0gc1swXS5jaHIKICAgICAgICB2YWwgPSBldmFsKGV4cHIpCiAgICAgICAgCiAgICAgICAgaWYgdmFsID09IGsgJiYgcy5sZW5ndGggPT0gMQogICAgICAgICAgICBwcmludCBleHByLCAiXG4iCiAgICAgICAgZWxzaWYgdmFsIDwgawogICAgICAgICAgICAjVGhlIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGFyZSAnKicsICcrJyBhbmQgJy4nIAogICAgICAgICAgICAjd2hlcmUgJy4nIGlzIHNpbXBsZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBkaWdpdHMKICAgICAgICAgICAgZmluZEV4cHIoc1sxLi4tMV0sIGV4cHIgKyAnKicsIGspCiAgICAgICAgICAgIGZpbmRFeHByKHNbMS4uLTFdLCBleHByICsgJysnLCBrKQogICAgICAgICAgICBmaW5kRXhwcihzWzEuLi0xXSwgZXhwciwgaykKICAgICAgICBlbmQKICAgIGVuZAplbmQKCgpmaW5kRXhwcigiMTIzNDU2Nzg5IiwgIiIsIDIwOTcpCgpzdHJpbmd5PSIxMjM0NTY3ODkiCnN1YnMgPSBzdHJpbmd5WzEuLi0xXTsKcHV0cyAje3N1YnN9