# Haskellwhores sosnooley.
# No need to handle special cases like 'Nothing'.
inf = float('inf')
def yoba(map, start, end):
# Haskellwhores sosnooley again.
# 'bounds'? Hah.
w = len(map)
h = w and len(map[0])
# And again. This lambda was borrowed from the Reifag's code.
value = lambda x, y: 0 if y == start \
else inf if not x \
else min(arr[x - 1][n] + map[n][y] for n in range(h))
# Pythonwhores sosnooley.
# Much more readable variant:
# arr = [[value(x, y) for y in range(h)] for x in range(w)]
# Unfortunately, it does not work because value() tries to access
# the arr list.
arr = []
for x in range(w): arr.append([value(x, y) for y in range(h)])
return min(arr[x][end] for x in range(w))
if __name__ == '__main__':
# Haskellwhores sosnooley again.
toArray2D = lambda arr: list(zip(*arr))
graph = [[inf, 7000000000000000000000000000000000000000000000000000000000000, 9000000000000000000000000000000000000000000000000000000000000, inf, inf, 14000000000000000000000000000000000000000000000000000000000000],
[ 7000000000000000000000000000000000000000000000000000000000000, inf, 10000000000000000000000000000000000000000000000000000000000000, 15000000000000000000000000000000000000000000000000000000000000, inf, inf],
[ 9000000000000000000000000000000000000000000000000000000000000, 10000000000000000000000000000000000000000000000000000000000000, inf, 11000000000000000000000000000000000000000000000000000000000000, inf, 2000000000000000000000000000000000000000000000000000000000000],
[inf, 15000000000000000000000000000000000000000000000000000000000000, 11000000000000000000000000000000000000000000000000000000000000, inf, 6000000000000000000000000000000000000000000000000000000000000, inf],
[inf, inf, inf, 6000000000000000000000000000000000000000000000000000000000000, inf, 9000000000000000000000000000000000000000000000000000000000000],
[ 14000000000000000000000000000000000000000000000000000000000000, inf, 2000000000000000000000000000000000000000000000000000000000000, inf, 9000000000000000000000000000000000000000000000000000000000000, inf]]
print(yoba(toArray2D(graph), 0, 4))
IyBIYXNrZWxsd2hvcmVzIHNvc25vb2xleS4KIyBObyBuZWVkIHRvIGhhbmRsZSBzcGVjaWFsIGNhc2VzIGxpa2UgJ05vdGhpbmcnLgppbmYgPSBmbG9hdCgnaW5mJykKCgpkZWYgeW9iYShtYXAsIHN0YXJ0LCBlbmQpOgogICAgIyBIYXNrZWxsd2hvcmVzIHNvc25vb2xleSBhZ2Fpbi4KICAgICMgJ2JvdW5kcyc/IEhhaC4KICAgIHcgPSBsZW4obWFwKQogICAgaCA9IHcgYW5kIGxlbihtYXBbMF0pCiAgICAjIEFuZCBhZ2Fpbi4gIFRoaXMgbGFtYmRhIHdhcyBib3Jyb3dlZCBmcm9tIHRoZSBSZWlmYWcncyBjb2RlLgogICAgdmFsdWUgPSBsYW1iZGEgeCwgeTogMCAgICBpZiB5ID09IHN0YXJ0IFwKICAgICAgICAgICAgICAgICAgICBlbHNlIGluZiAgaWYgbm90IHggICAgICBcCiAgICAgICAgICAgICAgICAgICAgZWxzZSBtaW4oYXJyW3ggLSAxXVtuXSArIG1hcFtuXVt5XSBmb3IgbiBpbiByYW5nZShoKSkKCiAgICAjIFB5dGhvbndob3JlcyBzb3Nub29sZXkuCiAgICAjIE11Y2ggbW9yZSByZWFkYWJsZSB2YXJpYW50OgogICAgIyAgICBhcnIgPSBbW3ZhbHVlKHgsIHkpIGZvciB5IGluIHJhbmdlKGgpXSBmb3IgeCBpbiByYW5nZSh3KV0KICAgICMgVW5mb3J0dW5hdGVseSwgaXQgZG9lcyBub3Qgd29yayBiZWNhdXNlIHZhbHVlKCkgdHJpZXMgdG8gYWNjZXNzCiAgICAjIHRoZSBhcnIgbGlzdC4KICAgIGFyciA9IFtdCiAgICBmb3IgeCBpbiByYW5nZSh3KTogYXJyLmFwcGVuZChbdmFsdWUoeCwgeSkgZm9yIHkgaW4gcmFuZ2UoaCldKQogICAgcmV0dXJuIG1pbihhcnJbeF1bZW5kXSBmb3IgeCBpbiByYW5nZSh3KSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIyBIYXNrZWxsd2hvcmVzIHNvc25vb2xleSBhZ2Fpbi4KICAgIHRvQXJyYXkyRCA9IGxhbWJkYSBhcnI6IGxpc3QoemlwKCphcnIpKQogICAgZ3JhcGggPSBbW2luZiwgICA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCAgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIGluZiwgaW5mLCAgMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBdLAogICAgICAgICAgICAgWyAgNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgaW5mLCAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsICAxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgaW5mLCBpbmZdLAogICAgICAgICAgICAgWyAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCBpbmYsICAxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgaW5mLCAgIDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBdLAogICAgICAgICAgICAgW2luZiwgIDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCAgMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIGluZiwgICA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCBpbmZdLAogICAgICAgICAgICAgW2luZiwgaW5mLCBpbmYsICAgNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgaW5mLCAgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBdLAogICAgICAgICAgICAgWyAxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgaW5mLCAgIDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIGluZiwgICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCBpbmZdXQogICAgcHJpbnQoeW9iYSh0b0FycmF5MkQoZ3JhcGgpLCAwLCA0KSkK