import sys


def findPath(arr, paths, xPos, yPos):
    left = 0
    right = 0
    up = 0
    down = 0
    if(paths[xPos][yPos] != -1):
        return paths[xPos][yPos]
    if(xPos > 0):
        if(arr[xPos - 1][yPos] > arr[xPos][yPos]):
            left = findPath(arr, paths, xPos - 1, yPos) + 1
    if(xPos < (len(arr) - 1)):
        if(arr[xPos + 1][yPos] > arr[xPos][yPos]):
            right = findPath(arr, paths, xPos + 1, yPos) + 1
    if(yPos > 0):
        if(arr[xPos][yPos - 1] > arr[xPos][yPos]):
            down = findPath(arr, paths, xPos, yPos - 1) + 1
    if(yPos < (len(arr[xPos]) - 1)):
        if(arr[xPos][yPos + 1] > arr[xPos][yPos]):
            up = findPath(arr, paths, xPos, yPos + 1) + 1
    paths[xPos][yPos] = max([left, right, up, down])
    return paths[xPos][yPos]


def getPathArr(arr):
    path = list(map(list, arr))

    x = 0
    while x < len(path):
        y = 0
        while y < len(path[x]):
            path[x][y] = -1
            y += 1
        x += 1
    return path

def traverseArr(arr):
    paths = getPathArr(arr)
    x = 0
    while x < len(arr):
        y = 0
        while y < len(arr[x]):
            paths[x][y] = findPath(arr, paths, x, y)
            y += 1
        x += 1
    longest = max(map(max, paths)) + 1
    return longest

def main():
    test = [[9, 9, 4], [7, 7, 8], [2, 1, 1]]
    testBig = [[8, 6, 3, 8, 7, 1, 1, 4, 10, 4, 1, 7, 6, 1, 7, 10, 2, 2, 5, 10, 5, 7, 1, 4, 6], 
    [7, 3, 6, 10, 5, 3, 6, 7, 6, 8, 1, 6, 5, 8, 1, 10, 3, 8, 10, 9, 3, 8, 9, 10, 10],
    [5, 9, 5, 1, 9, 9, 8, 8, 5, 6, 2, 1, 5, 9, 5, 6, 1, 10, 5, 3, 8, 8, 5, 6, 1],
    [8, 6, 1, 7, 4, 5, 9, 4, 8, 1, 6, 7, 1, 7, 5, 8, 8, 2, 1, 8, 2, 3, 6, 7, 1],
    [10, 1, 6, 5, 1, 5, 6, 9, 4, 6, 7, 2, 10, 8, 4, 7, 7, 10, 7, 5, 5, 6, 4, 10, 6],
    [2, 10, 8, 7, 4, 4, 7, 10, 2, 5, 5, 4, 2, 3, 2, 1, 6, 6, 9, 3, 9, 6, 1, 1, 1],
    [1, 5, 6, 8, 4, 10, 9, 1, 1, 6, 3, 3, 9, 5, 3, 4, 7, 7, 1, 9, 1, 5, 5, 2, 1],
    [6, 7, 1, 10, 9, 8, 3, 4, 1, 8, 6, 8, 1, 1, 5, 2, 6, 6, 7, 10, 5, 1, 6, 3, 6],
    [5, 2, 5, 7, 1, 1, 9, 7, 6, 2, 1, 4, 7, 8, 8, 6, 7, 3, 7, 8, 8, 7, 6, 7, 3],
    [5, 3, 4, 2, 9, 10, 3, 10, 9, 8, 9, 7, 6, 8, 3, 4, 4, 2, 1, 1, 2, 7, 3, 8, 7],
    [10, 2, 10, 1, 5, 5, 10, 4, 5, 8, 5, 4, 3, 6, 3, 2, 10, 9, 4, 5, 7, 5, 10, 10, 5],
    [5, 6, 2, 8, 6, 9, 9, 6, 10, 7, 2, 7, 6, 5, 9, 2, 4, 1, 4, 9, 4, 4, 9, 7, 4],
    [10, 1, 2, 6, 8, 2, 5, 1, 8, 5, 2, 9, 10, 1, 7, 3, 9, 6, 9, 5, 7, 2, 5, 1, 7],
    [4, 7, 2, 9, 9, 4, 9, 3, 6, 1, 6, 4, 1, 7, 1, 9, 4, 5, 1, 2, 9, 4, 4, 7, 9],
    [6, 5, 1, 8, 9, 9, 9, 9, 8, 8, 9, 8, 7, 10, 10, 10, 10, 9, 1, 2, 4, 3, 5, 5, 4],
    [8, 8, 2, 4, 10, 3, 1, 9, 5, 4, 3, 5, 9, 7, 10, 8, 2, 4, 8, 4, 4, 6, 3, 8, 2],
    [2, 3, 6, 3, 9, 10, 9, 5, 7, 9, 3, 1, 5, 5, 1, 3, 7, 2, 3, 7, 10, 3, 9, 4, 8],
    [1, 7, 6, 10, 4, 4, 10, 10, 2, 4, 2, 6, 4, 7, 5, 9, 4, 4, 3, 5, 7, 5, 9, 10, 1],
    [9, 8, 3, 9, 10, 7, 7, 4, 8, 6, 10, 5, 6, 9, 9, 10, 3, 6, 3, 8, 2, 5, 9, 10, 8],
    [1, 2, 1, 7, 2, 6, 6, 3, 5, 9, 3, 4, 2, 10, 10, 2, 8, 4, 3, 4, 3, 10, 4, 1, 6],
    [3, 2, 4, 2, 8, 9, 4, 1, 2, 1, 5, 10, 4, 9, 7, 1, 10, 9, 10, 8, 7, 1, 4, 5, 2],
    [2, 6, 6, 2, 6, 3, 2, 10, 8, 8, 4, 9, 4, 10, 6, 7, 7, 5, 8, 9, 9, 4, 8, 7, 2],
    [6, 2, 10, 6, 10, 8, 3, 3, 9, 5, 5, 10, 1, 10, 9, 4, 6, 3, 2, 6, 6, 8, 1, 1, 7],
    [9, 10, 4, 6, 6, 6, 7, 1, 2, 10, 8, 7, 4, 7, 1, 10, 4, 5, 8, 5, 2, 5, 3, 7, 4],
    [9, 10, 3, 6, 6, 1, 9, 3, 6, 5, 5, 7, 2, 10, 4, 2, 4, 2, 7, 10, 6, 1, 7, 5, 6]]
    print(traverseArr(test))
    print(traverseArr(testBig))

if __name__ == "__main__":
    main()

354383fbeafc823d54405d7b8b0010906ee700ff
<mask token>


def getPathArr(arr):
    path = list(map(list, arr))
    x = 0
    while x < len(path):
        y = 0
        while y < len(path[x]):
            path[x][y] = -1
            y += 1
        x += 1
    return path


def traverseArr(arr):
    paths = getPathArr(arr)
    x = 0
    while x < len(arr):
        y = 0
        while y < len(arr[x]):
            paths[x][y] = findPath(arr, paths, x, y)
            y += 1
        x += 1
    longest = max(map(max, paths)) + 1
    return longest


<mask token>

<mask token>


def findPath(arr, paths, xPos, yPos):
    left = 0
    right = 0
    up = 0
    down = 0
    if paths[xPos][yPos] != -1:
        return paths[xPos][yPos]
    if xPos > 0:
        if arr[xPos - 1][yPos] > arr[xPos][yPos]:
            left = findPath(arr, paths, xPos - 1, yPos) + 1
    if xPos < len(arr) - 1:
        if arr[xPos + 1][yPos] > arr[xPos][yPos]:
            right = findPath(arr, paths, xPos + 1, yPos) + 1
    if yPos > 0:
        if arr[xPos][yPos - 1] > arr[xPos][yPos]:
            down = findPath(arr, paths, xPos, yPos - 1) + 1
    if yPos < len(arr[xPos]) - 1:
        if arr[xPos][yPos + 1] > arr[xPos][yPos]:
            up = findPath(arr, paths, xPos, yPos + 1) + 1
    paths[xPos][yPos] = max([left, right, up, down])
    return paths[xPos][yPos]


def getPathArr(arr):
    path = list(map(list, arr))
    x = 0
    while x < len(path):
        y = 0
        while y < len(path[x]):
            path[x][y] = -1
            y += 1
        x += 1
    return path


def traverseArr(arr):
    paths = getPathArr(arr)
    x = 0
    while x < len(arr):
        y = 0
        while y < len(arr[x]):
            paths[x][y] = findPath(arr, paths, x, y)
            y += 1
        x += 1
    longest = max(map(max, paths)) + 1
    return longest


def main():
    test = [[9, 9, 4], [7, 7, 8], [2, 1, 1]]
    testBig = [[8, 6, 3, 8, 7, 1, 1, 4, 10, 4, 1, 7, 6, 1, 7, 10, 2, 2, 5, 
        10, 5, 7, 1, 4, 6], [7, 3, 6, 10, 5, 3, 6, 7, 6, 8, 1, 6, 5, 8, 1, 
        10, 3, 8, 10, 9, 3, 8, 9, 10, 10], [5, 9, 5, 1, 9, 9, 8, 8, 5, 6, 2,
        1, 5, 9, 5, 6, 1, 10, 5, 3, 8, 8, 5, 6, 1], [8, 6, 1, 7, 4, 5, 9, 4,
        8, 1, 6, 7, 1, 7, 5, 8, 8, 2, 1, 8, 2, 3, 6, 7, 1], [10, 1, 6, 5, 1,
        5, 6, 9, 4, 6, 7, 2, 10, 8, 4, 7, 7, 10, 7, 5, 5, 6, 4, 10, 6], [2,
        10, 8, 7, 4, 4, 7, 10, 2, 5, 5, 4, 2, 3, 2, 1, 6, 6, 9, 3, 9, 6, 1,
        1, 1], [1, 5, 6, 8, 4, 10, 9, 1, 1, 6, 3, 3, 9, 5, 3, 4, 7, 7, 1, 9,
        1, 5, 5, 2, 1], [6, 7, 1, 10, 9, 8, 3, 4, 1, 8, 6, 8, 1, 1, 5, 2, 6,
        6, 7, 10, 5, 1, 6, 3, 6], [5, 2, 5, 7, 1, 1, 9, 7, 6, 2, 1, 4, 7, 8,
        8, 6, 7, 3, 7, 8, 8, 7, 6, 7, 3], [5, 3, 4, 2, 9, 10, 3, 10, 9, 8, 
        9, 7, 6, 8, 3, 4, 4, 2, 1, 1, 2, 7, 3, 8, 7], [10, 2, 10, 1, 5, 5, 
        10, 4, 5, 8, 5, 4, 3, 6, 3, 2, 10, 9, 4, 5, 7, 5, 10, 10, 5], [5, 6,
        2, 8, 6, 9, 9, 6, 10, 7, 2, 7, 6, 5, 9, 2, 4, 1, 4, 9, 4, 4, 9, 7, 
        4], [10, 1, 2, 6, 8, 2, 5, 1, 8, 5, 2, 9, 10, 1, 7, 3, 9, 6, 9, 5, 
        7, 2, 5, 1, 7], [4, 7, 2, 9, 9, 4, 9, 3, 6, 1, 6, 4, 1, 7, 1, 9, 4,
        5, 1, 2, 9, 4, 4, 7, 9], [6, 5, 1, 8, 9, 9, 9, 9, 8, 8, 9, 8, 7, 10,
        10, 10, 10, 9, 1, 2, 4, 3, 5, 5, 4], [8, 8, 2, 4, 10, 3, 1, 9, 5, 4,
        3, 5, 9, 7, 10, 8, 2, 4, 8, 4, 4, 6, 3, 8, 2], [2, 3, 6, 3, 9, 10, 
        9, 5, 7, 9, 3, 1, 5, 5, 1, 3, 7, 2, 3, 7, 10, 3, 9, 4, 8], [1, 7, 6,
        10, 4, 4, 10, 10, 2, 4, 2, 6, 4, 7, 5, 9, 4, 4, 3, 5, 7, 5, 9, 10, 
        1], [9, 8, 3, 9, 10, 7, 7, 4, 8, 6, 10, 5, 6, 9, 9, 10, 3, 6, 3, 8,
        2, 5, 9, 10, 8], [1, 2, 1, 7, 2, 6, 6, 3, 5, 9, 3, 4, 2, 10, 10, 2,
        8, 4, 3, 4, 3, 10, 4, 1, 6], [3, 2, 4, 2, 8, 9, 4, 1, 2, 1, 5, 10, 
        4, 9, 7, 1, 10, 9, 10, 8, 7, 1, 4, 5, 2], [2, 6, 6, 2, 6, 3, 2, 10,
        8, 8, 4, 9, 4, 10, 6, 7, 7, 5, 8, 9, 9, 4, 8, 7, 2], [6, 2, 10, 6, 
        10, 8, 3, 3, 9, 5, 5, 10, 1, 10, 9, 4, 6, 3, 2, 6, 6, 8, 1, 1, 7],
        [9, 10, 4, 6, 6, 6, 7, 1, 2, 10, 8, 7, 4, 7, 1, 10, 4, 5, 8, 5, 2, 
        5, 3, 7, 4], [9, 10, 3, 6, 6, 1, 9, 3, 6, 5, 5, 7, 2, 10, 4, 2, 4, 
        2, 7, 10, 6, 1, 7, 5, 6]]
    print(traverseArr(test))
    print(traverseArr(testBig))


<mask token>

<mask token>


def findPath(arr, paths, xPos, yPos):
    left = 0
    right = 0
    up = 0
    down = 0
    if paths[xPos][yPos] != -1:
        return paths[xPos][yPos]
    if xPos > 0:
        if arr[xPos - 1][yPos] > arr[xPos][yPos]:
            left = findPath(arr, paths, xPos - 1, yPos) + 1
    if xPos < len(arr) - 1:
        if arr[xPos + 1][yPos] > arr[xPos][yPos]:
            right = findPath(arr, paths, xPos + 1, yPos) + 1
    if yPos > 0:
        if arr[xPos][yPos - 1] > arr[xPos][yPos]:
            down = findPath(arr, paths, xPos, yPos - 1) + 1
    if yPos < len(arr[xPos]) - 1:
        if arr[xPos][yPos + 1] > arr[xPos][yPos]:
            up = findPath(arr, paths, xPos, yPos + 1) + 1
    paths[xPos][yPos] = max([left, right, up, down])
    return paths[xPos][yPos]


def getPathArr(arr):
    path = list(map(list, arr))
    x = 0
    while x < len(path):
        y = 0
        while y < len(path[x]):
            path[x][y] = -1
            y += 1
        x += 1
    return path


def traverseArr(arr):
    paths = getPathArr(arr)
    x = 0
    while x < len(arr):
        y = 0
        while y < len(arr[x]):
            paths[x][y] = findPath(arr, paths, x, y)
            y += 1
        x += 1
    longest = max(map(max, paths)) + 1
    return longest


def main():
    test = [[9, 9, 4], [7, 7, 8], [2, 1, 1]]
    testBig = [[8, 6, 3, 8, 7, 1, 1, 4, 10, 4, 1, 7, 6, 1, 7, 10, 2, 2, 5, 
        10, 5, 7, 1, 4, 6], [7, 3, 6, 10, 5, 3, 6, 7, 6, 8, 1, 6, 5, 8, 1, 
        10, 3, 8, 10, 9, 3, 8, 9, 10, 10], [5, 9, 5, 1, 9, 9, 8, 8, 5, 6, 2,
        1, 5, 9, 5, 6, 1, 10, 5, 3, 8, 8, 5, 6, 1], [8, 6, 1, 7, 4, 5, 9, 4,
        8, 1, 6, 7, 1, 7, 5, 8, 8, 2, 1, 8, 2, 3, 6, 7, 1], [10, 1, 6, 5, 1,
        5, 6, 9, 4, 6, 7, 2, 10, 8, 4, 7, 7, 10, 7, 5, 5, 6, 4, 10, 6], [2,
        10, 8, 7, 4, 4, 7, 10, 2, 5, 5, 4, 2, 3, 2, 1, 6, 6, 9, 3, 9, 6, 1,
        1, 1], [1, 5, 6, 8, 4, 10, 9, 1, 1, 6, 3, 3, 9, 5, 3, 4, 7, 7, 1, 9,
        1, 5, 5, 2, 1], [6, 7, 1, 10, 9, 8, 3, 4, 1, 8, 6, 8, 1, 1, 5, 2, 6,
        6, 7, 10, 5, 1, 6, 3, 6], [5, 2, 5, 7, 1, 1, 9, 7, 6, 2, 1, 4, 7, 8,
        8, 6, 7, 3, 7, 8, 8, 7, 6, 7, 3], [5, 3, 4, 2, 9, 10, 3, 10, 9, 8, 
        9, 7, 6, 8, 3, 4, 4, 2, 1, 1, 2, 7, 3, 8, 7], [10, 2, 10, 1, 5, 5, 
        10, 4, 5, 8, 5, 4, 3, 6, 3, 2, 10, 9, 4, 5, 7, 5, 10, 10, 5], [5, 6,
        2, 8, 6, 9, 9, 6, 10, 7, 2, 7, 6, 5, 9, 2, 4, 1, 4, 9, 4, 4, 9, 7, 
        4], [10, 1, 2, 6, 8, 2, 5, 1, 8, 5, 2, 9, 10, 1, 7, 3, 9, 6, 9, 5, 
        7, 2, 5, 1, 7], [4, 7, 2, 9, 9, 4, 9, 3, 6, 1, 6, 4, 1, 7, 1, 9, 4,
        5, 1, 2, 9, 4, 4, 7, 9], [6, 5, 1, 8, 9, 9, 9, 9, 8, 8, 9, 8, 7, 10,
        10, 10, 10, 9, 1, 2, 4, 3, 5, 5, 4], [8, 8, 2, 4, 10, 3, 1, 9, 5, 4,
        3, 5, 9, 7, 10, 8, 2, 4, 8, 4, 4, 6, 3, 8, 2], [2, 3, 6, 3, 9, 10, 
        9, 5, 7, 9, 3, 1, 5, 5, 1, 3, 7, 2, 3, 7, 10, 3, 9, 4, 8], [1, 7, 6,
        10, 4, 4, 10, 10, 2, 4, 2, 6, 4, 7, 5, 9, 4, 4, 3, 5, 7, 5, 9, 10, 
        1], [9, 8, 3, 9, 10, 7, 7, 4, 8, 6, 10, 5, 6, 9, 9, 10, 3, 6, 3, 8,
        2, 5, 9, 10, 8], [1, 2, 1, 7, 2, 6, 6, 3, 5, 9, 3, 4, 2, 10, 10, 2,
        8, 4, 3, 4, 3, 10, 4, 1, 6], [3, 2, 4, 2, 8, 9, 4, 1, 2, 1, 5, 10, 
        4, 9, 7, 1, 10, 9, 10, 8, 7, 1, 4, 5, 2], [2, 6, 6, 2, 6, 3, 2, 10,
        8, 8, 4, 9, 4, 10, 6, 7, 7, 5, 8, 9, 9, 4, 8, 7, 2], [6, 2, 10, 6, 
        10, 8, 3, 3, 9, 5, 5, 10, 1, 10, 9, 4, 6, 3, 2, 6, 6, 8, 1, 1, 7],
        [9, 10, 4, 6, 6, 6, 7, 1, 2, 10, 8, 7, 4, 7, 1, 10, 4, 5, 8, 5, 2, 
        5, 3, 7, 4], [9, 10, 3, 6, 6, 1, 9, 3, 6, 5, 5, 7, 2, 10, 4, 2, 4, 
        2, 7, 10, 6, 1, 7, 5, 6]]
    print(traverseArr(test))
    print(traverseArr(testBig))


if __name__ == '__main__':
    main()

import sys


def findPath(arr, paths, xPos, yPos):
    left = 0
    right = 0
    up = 0
    down = 0
    if paths[xPos][yPos] != -1:
        return paths[xPos][yPos]
    if xPos > 0:
        if arr[xPos - 1][yPos] > arr[xPos][yPos]:
            left = findPath(arr, paths, xPos - 1, yPos) + 1
    if xPos < len(arr) - 1:
        if arr[xPos + 1][yPos] > arr[xPos][yPos]:
            right = findPath(arr, paths, xPos + 1, yPos) + 1
    if yPos > 0:
        if arr[xPos][yPos - 1] > arr[xPos][yPos]:
            down = findPath(arr, paths, xPos, yPos - 1) + 1
    if yPos < len(arr[xPos]) - 1:
        if arr[xPos][yPos + 1] > arr[xPos][yPos]:
            up = findPath(arr, paths, xPos, yPos + 1) + 1
    paths[xPos][yPos] = max([left, right, up, down])
    return paths[xPos][yPos]


def getPathArr(arr):
    path = list(map(list, arr))
    x = 0
    while x < len(path):
        y = 0
        while y < len(path[x]):
            path[x][y] = -1
            y += 1
        x += 1
    return path


def traverseArr(arr):
    paths = getPathArr(arr)
    x = 0
    while x < len(arr):
        y = 0
        while y < len(arr[x]):
            paths[x][y] = findPath(arr, paths, x, y)
            y += 1
        x += 1
    longest = max(map(max, paths)) + 1
    return longest


def main():
    test = [[9, 9, 4], [7, 7, 8], [2, 1, 1]]
    testBig = [[8, 6, 3, 8, 7, 1, 1, 4, 10, 4, 1, 7, 6, 1, 7, 10, 2, 2, 5, 
        10, 5, 7, 1, 4, 6], [7, 3, 6, 10, 5, 3, 6, 7, 6, 8, 1, 6, 5, 8, 1, 
        10, 3, 8, 10, 9, 3, 8, 9, 10, 10], [5, 9, 5, 1, 9, 9, 8, 8, 5, 6, 2,
        1, 5, 9, 5, 6, 1, 10, 5, 3, 8, 8, 5, 6, 1], [8, 6, 1, 7, 4, 5, 9, 4,
        8, 1, 6, 7, 1, 7, 5, 8, 8, 2, 1, 8, 2, 3, 6, 7, 1], [10, 1, 6, 5, 1,
        5, 6, 9, 4, 6, 7, 2, 10, 8, 4, 7, 7, 10, 7, 5, 5, 6, 4, 10, 6], [2,
        10, 8, 7, 4, 4, 7, 10, 2, 5, 5, 4, 2, 3, 2, 1, 6, 6, 9, 3, 9, 6, 1,
        1, 1], [1, 5, 6, 8, 4, 10, 9, 1, 1, 6, 3, 3, 9, 5, 3, 4, 7, 7, 1, 9,
        1, 5, 5, 2, 1], [6, 7, 1, 10, 9, 8, 3, 4, 1, 8, 6, 8, 1, 1, 5, 2, 6,
        6, 7, 10, 5, 1, 6, 3, 6], [5, 2, 5, 7, 1, 1, 9, 7, 6, 2, 1, 4, 7, 8,
        8, 6, 7, 3, 7, 8, 8, 7, 6, 7, 3], [5, 3, 4, 2, 9, 10, 3, 10, 9, 8, 
        9, 7, 6, 8, 3, 4, 4, 2, 1, 1, 2, 7, 3, 8, 7], [10, 2, 10, 1, 5, 5, 
        10, 4, 5, 8, 5, 4, 3, 6, 3, 2, 10, 9, 4, 5, 7, 5, 10, 10, 5], [5, 6,
        2, 8, 6, 9, 9, 6, 10, 7, 2, 7, 6, 5, 9, 2, 4, 1, 4, 9, 4, 4, 9, 7, 
        4], [10, 1, 2, 6, 8, 2, 5, 1, 8, 5, 2, 9, 10, 1, 7, 3, 9, 6, 9, 5, 
        7, 2, 5, 1, 7], [4, 7, 2, 9, 9, 4, 9, 3, 6, 1, 6, 4, 1, 7, 1, 9, 4,
        5, 1, 2, 9, 4, 4, 7, 9], [6, 5, 1, 8, 9, 9, 9, 9, 8, 8, 9, 8, 7, 10,
        10, 10, 10, 9, 1, 2, 4, 3, 5, 5, 4], [8, 8, 2, 4, 10, 3, 1, 9, 5, 4,
        3, 5, 9, 7, 10, 8, 2, 4, 8, 4, 4, 6, 3, 8, 2], [2, 3, 6, 3, 9, 10, 
        9, 5, 7, 9, 3, 1, 5, 5, 1, 3, 7, 2, 3, 7, 10, 3, 9, 4, 8], [1, 7, 6,
        10, 4, 4, 10, 10, 2, 4, 2, 6, 4, 7, 5, 9, 4, 4, 3, 5, 7, 5, 9, 10, 
        1], [9, 8, 3, 9, 10, 7, 7, 4, 8, 6, 10, 5, 6, 9, 9, 10, 3, 6, 3, 8,
        2, 5, 9, 10, 8], [1, 2, 1, 7, 2, 6, 6, 3, 5, 9, 3, 4, 2, 10, 10, 2,
        8, 4, 3, 4, 3, 10, 4, 1, 6], [3, 2, 4, 2, 8, 9, 4, 1, 2, 1, 5, 10, 
        4, 9, 7, 1, 10, 9, 10, 8, 7, 1, 4, 5, 2], [2, 6, 6, 2, 6, 3, 2, 10,
        8, 8, 4, 9, 4, 10, 6, 7, 7, 5, 8, 9, 9, 4, 8, 7, 2], [6, 2, 10, 6, 
        10, 8, 3, 3, 9, 5, 5, 10, 1, 10, 9, 4, 6, 3, 2, 6, 6, 8, 1, 1, 7],
        [9, 10, 4, 6, 6, 6, 7, 1, 2, 10, 8, 7, 4, 7, 1, 10, 4, 5, 8, 5, 2, 
        5, 3, 7, 4], [9, 10, 3, 6, 6, 1, 9, 3, 6, 5, 5, 7, 2, 10, 4, 2, 4, 
        2, 7, 10, 6, 1, 7, 5, 6]]
    print(traverseArr(test))
    print(traverseArr(testBig))


if __name__ == '__main__':
    main()

import sys


def findPath(arr, paths, xPos, yPos):
    left = 0
    right = 0
    up = 0
    down = 0
    if(paths[xPos][yPos] != -1):
        return paths[xPos][yPos]
    if(xPos > 0):
        if(arr[xPos - 1][yPos] > arr[xPos][yPos]):
            left = findPath(arr, paths, xPos - 1, yPos) + 1
    if(xPos < (len(arr) - 1)):
        if(arr[xPos + 1][yPos] > arr[xPos][yPos]):
            right = findPath(arr, paths, xPos + 1, yPos) + 1
    if(yPos > 0):
        if(arr[xPos][yPos - 1] > arr[xPos][yPos]):
            down = findPath(arr, paths, xPos, yPos - 1) + 1
    if(yPos < (len(arr[xPos]) - 1)):
        if(arr[xPos][yPos + 1] > arr[xPos][yPos]):
            up = findPath(arr, paths, xPos, yPos + 1) + 1
    paths[xPos][yPos] = max([left, right, up, down])
    return paths[xPos][yPos]


def getPathArr(arr):
    path = list(map(list, arr))

    x = 0
    while x < len(path):
        y = 0
        while y < len(path[x]):
            path[x][y] = -1
            y += 1
        x += 1
    return path

def traverseArr(arr):
    paths = getPathArr(arr)
    x = 0
    while x < len(arr):
        y = 0
        while y < len(arr[x]):
            paths[x][y] = findPath(arr, paths, x, y)
            y += 1
        x += 1
    longest = max(map(max, paths)) + 1
    return longest

def main():
    test = [[9, 9, 4], [7, 7, 8], [2, 1, 1]]
    testBig = [[8, 6, 3, 8, 7, 1, 1, 4, 10, 4, 1, 7, 6, 1, 7, 10, 2, 2, 5, 10, 5, 7, 1, 4, 6], 
    [7, 3, 6, 10, 5, 3, 6, 7, 6, 8, 1, 6, 5, 8, 1, 10, 3, 8, 10, 9, 3, 8, 9, 10, 10],
    [5, 9, 5, 1, 9, 9, 8, 8, 5, 6, 2, 1, 5, 9, 5, 6, 1, 10, 5, 3, 8, 8, 5, 6, 1],
    [8, 6, 1, 7, 4, 5, 9, 4, 8, 1, 6, 7, 1, 7, 5, 8, 8, 2, 1, 8, 2, 3, 6, 7, 1],
    [10, 1, 6, 5, 1, 5, 6, 9, 4, 6, 7, 2, 10, 8, 4, 7, 7, 10, 7, 5, 5, 6, 4, 10, 6],
    [2, 10, 8, 7, 4, 4, 7, 10, 2, 5, 5, 4, 2, 3, 2, 1, 6, 6, 9, 3, 9, 6, 1, 1, 1],
    [1, 5, 6, 8, 4, 10, 9, 1, 1, 6, 3, 3, 9, 5, 3, 4, 7, 7, 1, 9, 1, 5, 5, 2, 1],
    [6, 7, 1, 10, 9, 8, 3, 4, 1, 8, 6, 8, 1, 1, 5, 2, 6, 6, 7, 10, 5, 1, 6, 3, 6],
    [5, 2, 5, 7, 1, 1, 9, 7, 6, 2, 1, 4, 7, 8, 8, 6, 7, 3, 7, 8, 8, 7, 6, 7, 3],
    [5, 3, 4, 2, 9, 10, 3, 10, 9, 8, 9, 7, 6, 8, 3, 4, 4, 2, 1, 1, 2, 7, 3, 8, 7],
    [10, 2, 10, 1, 5, 5, 10, 4, 5, 8, 5, 4, 3, 6, 3, 2, 10, 9, 4, 5, 7, 5, 10, 10, 5],
    [5, 6, 2, 8, 6, 9, 9, 6, 10, 7, 2, 7, 6, 5, 9, 2, 4, 1, 4, 9, 4, 4, 9, 7, 4],
    [10, 1, 2, 6, 8, 2, 5, 1, 8, 5, 2, 9, 10, 1, 7, 3, 9, 6, 9, 5, 7, 2, 5, 1, 7],
    [4, 7, 2, 9, 9, 4, 9, 3, 6, 1, 6, 4, 1, 7, 1, 9, 4, 5, 1, 2, 9, 4, 4, 7, 9],
    [6, 5, 1, 8, 9, 9, 9, 9, 8, 8, 9, 8, 7, 10, 10, 10, 10, 9, 1, 2, 4, 3, 5, 5, 4],
    [8, 8, 2, 4, 10, 3, 1, 9, 5, 4, 3, 5, 9, 7, 10, 8, 2, 4, 8, 4, 4, 6, 3, 8, 2],
    [2, 3, 6, 3, 9, 10, 9, 5, 7, 9, 3, 1, 5, 5, 1, 3, 7, 2, 3, 7, 10, 3, 9, 4, 8],
    [1, 7, 6, 10, 4, 4, 10, 10, 2, 4, 2, 6, 4, 7, 5, 9, 4, 4, 3, 5, 7, 5, 9, 10, 1],
    [9, 8, 3, 9, 10, 7, 7, 4, 8, 6, 10, 5, 6, 9, 9, 10, 3, 6, 3, 8, 2, 5, 9, 10, 8],
    [1, 2, 1, 7, 2, 6, 6, 3, 5, 9, 3, 4, 2, 10, 10, 2, 8, 4, 3, 4, 3, 10, 4, 1, 6],
    [3, 2, 4, 2, 8, 9, 4, 1, 2, 1, 5, 10, 4, 9, 7, 1, 10, 9, 10, 8, 7, 1, 4, 5, 2],
    [2, 6, 6, 2, 6, 3, 2, 10, 8, 8, 4, 9, 4, 10, 6, 7, 7, 5, 8, 9, 9, 4, 8, 7, 2],
    [6, 2, 10, 6, 10, 8, 3, 3, 9, 5, 5, 10, 1, 10, 9, 4, 6, 3, 2, 6, 6, 8, 1, 1, 7],
    [9, 10, 4, 6, 6, 6, 7, 1, 2, 10, 8, 7, 4, 7, 1, 10, 4, 5, 8, 5, 2, 5, 3, 7, 4],
    [9, 10, 3, 6, 6, 1, 9, 3, 6, 5, 5, 7, 2, 10, 4, 2, 4, 2, 7, 10, 6, 1, 7, 5, 6]]
    print(traverseArr(test))
    print(traverseArr(testBig))

if __name__ == "__main__":
    main()
