def solve!(input)
input.sub!(/O*$/,'')
t=2**$&.size-1
oc,xc=%W(O X).map{|c|input.count(c)}
t*4*2**oc+(
xc==0 ? 0 : xc==1 ? 5+( oc==0 ? 0 : 5**oc ) : 1+4**(xc-1)*5**oc
)
end
def test(n,input,expected)
actual=solve!(input).to_s
puts "#{n}:"+(actual==expected ? "ok" : "ng ( #{actual} against #{expected} )")
end
test(0, "X", "5")
test(1, "O", "4")
test(2, "XX", "5")
test(3, "OX", "10")
test(4, "XO", "9")
test(5, "XOO", "17")
test(6, "OXX", "21")
test(7, "OXO", "18")
test(8, "OOOX", "130")
test(9, "OXXO", "29")
test(10, "XXOX", "81")
test(11, "XOXXO", "89")
test(12, "OOOOX", "630")
test(13, "OXOOO", "66")
test(14, "OXOXOX", "2001")
test(15, "OXOXXO", "417")
test(16, "OXXOXX", "1601")
test(17, "XXXOXOO", "345")
test(18, "OOOOOXO", "3258")
test(19, "OXXOXXX", "6401")
ZGVmIHNvbHZlIShpbnB1dCkKICBpbnB1dC5zdWIhKC9PKiQvLCcnKQogIHQ9MioqJCYuc2l6ZS0xCiAgb2MseGM9JVcoTyBYKS5tYXB7fGN8aW5wdXQuY291bnQoYyl9CiAgdCo0KjIqKm9jKygKICAgIHhjPT0wID8gMCA6IHhjPT0xID8gNSsoIG9jPT0wID8gMCA6IDUqKm9jICkgOiAxKzQqKih4Yy0xKSo1KipvYwogICkKZW5kCgpkZWYgdGVzdChuLGlucHV0LGV4cGVjdGVkKQogIGFjdHVhbD1zb2x2ZSEoaW5wdXQpLnRvX3MKICBwdXRzICIje259OiIrKGFjdHVhbD09ZXhwZWN0ZWQgPyAib2siIDogIm5nICggI3thY3R1YWx9IGFnYWluc3QgI3tleHBlY3RlZH0gKSIpCmVuZAoKdGVzdCgwLCAiWCIsICI1IikKdGVzdCgxLCAiTyIsICI0IikKdGVzdCgyLCAiWFgiLCAiNSIpCnRlc3QoMywgIk9YIiwgIjEwIikKdGVzdCg0LCAiWE8iLCAiOSIpCnRlc3QoNSwgIlhPTyIsICIxNyIpCnRlc3QoNiwgIk9YWCIsICIyMSIpCnRlc3QoNywgIk9YTyIsICIxOCIpCnRlc3QoOCwgIk9PT1giLCAiMTMwIikKdGVzdCg5LCAiT1hYTyIsICIyOSIpCnRlc3QoMTAsICJYWE9YIiwgIjgxIikKdGVzdCgxMSwgIlhPWFhPIiwgIjg5IikKdGVzdCgxMiwgIk9PT09YIiwgIjYzMCIpCnRlc3QoMTMsICJPWE9PTyIsICI2NiIpCnRlc3QoMTQsICJPWE9YT1giLCAiMjAwMSIpCnRlc3QoMTUsICJPWE9YWE8iLCAiNDE3IikKdGVzdCgxNiwgIk9YWE9YWCIsICIxNjAxIikKdGVzdCgxNywgIlhYWE9YT08iLCAiMzQ1IikKdGVzdCgxOCwgIk9PT09PWE8iLCAiMzI1OCIpCnRlc3QoMTksICJPWFhPWFhYIiwgIjY0MDEiKQ==