module Enumerable
def tally(h = {})
each_with_object(h) {|x, h| h[x] = (h[x] || 0) + 1}
end
end
f = ->a {
factrial = ->n {(1..n).inject(:*) || 1}
n_permutations = ->a {factrial.(a.size) / a.tally.values.map(&factrial).inject(:*)}
(0...a.size).map {|i| a[i..-1]}.map {|b|
b.count(&b[0].method(:>)) * n_permutations.(b) / b.size
}.sum + 1
}
p f.([1, 2, 3, 4, 5, 6, 7, 8, 9])
p f.([1, 2, 3, 4, 5, 6, 7, 9, 8])
p f.([1, 2, 3, 4, 5, 6, 8, 7, 9])
p f.([4, 1, 6, 5, 8, 9, 7, 3, 2])
p f.([6, 8, 4, 7, 5, 3, 2, 1, 9])
p f.([9, 8, 7, 6, 5, 4, 3, 2, 1])
p f.([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])
p f.([1, 1, 1, 2, 2, 2, 3, 3, 4, 3, 4, 4])
p f.([1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 3, 4])
p f.([2, 2, 2, 3, 3, 1, 4, 3, 4, 1, 1, 4])
p f.([3, 2, 4, 4, 2, 4, 3, 3, 1, 1, 1, 2])
p f.([4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1])
p f.([3, 1, 4, 1, 5, 9])
bW9kdWxlIEVudW1lcmFibGUKICBkZWYgdGFsbHkoaCA9IHt9KQogICAgZWFjaF93aXRoX29iamVjdChoKSB7fHgsIGh8IGhbeF0gPSAoaFt4XSB8fCAwKSArIDF9CiAgZW5kCmVuZApmID0gLT5hIHsKICBmYWN0cmlhbCA9IC0+biB7KDEuLm4pLmluamVjdCg6KikgfHwgMX0KICBuX3Blcm11dGF0aW9ucyA9IC0+YSB7ZmFjdHJpYWwuKGEuc2l6ZSkgLyBhLnRhbGx5LnZhbHVlcy5tYXAoJmZhY3RyaWFsKS5pbmplY3QoOiopfQogICgwLi4uYS5zaXplKS5tYXAge3xpfCBhW2kuLi0xXX0ubWFwIHt8YnwKICAgIGIuY291bnQoJmJbMF0ubWV0aG9kKDo+KSkgKiBuX3Blcm11dGF0aW9ucy4oYikgLyBiLnNpemUKICB9LnN1bSArIDEKfQpwIGYuKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XSkKcCBmLihbMSwgMiwgMywgNCwgNSwgNiwgNywgOSwgOF0pCnAgZi4oWzEsIDIsIDMsIDQsIDUsIDYsIDgsIDcsIDldKQpwIGYuKFs0LCAxLCA2LCA1LCA4LCA5LCA3LCAzLCAyXSkKcCBmLihbNiwgOCwgNCwgNywgNSwgMywgMiwgMSwgOV0pCnAgZi4oWzksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDFdKQpwIGYuKFsxLCAxLCAxLCAyLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0XSkKcCBmLihbMSwgMSwgMSwgMiwgMiwgMiwgMywgMywgNCwgMywgNCwgNF0pCnAgZi4oWzEsIDEsIDEsIDIsIDIsIDIsIDMsIDMsIDQsIDQsIDMsIDRdKQpwIGYuKFsyLCAyLCAyLCAzLCAzLCAxLCA0LCAzLCA0LCAxLCAxLCA0XSkKcCBmLihbMywgMiwgNCwgNCwgMiwgNCwgMywgMywgMSwgMSwgMSwgMl0pCnAgZi4oWzQsIDQsIDQsIDMsIDMsIDMsIDIsIDIsIDIsIDEsIDEsIDFdKQpwIGYuKFszLCAxLCA0LCAxLCA1LCA5XSkK