from typing import Tuple, List

def n31(a: int) -> Tuple[List[int], int]: 
    """
    Returns the Collatz sequence and its length of any postiver integer.
    >>> n31(4)
    ([4, 2, 1], 3)
    """

    if not isinstance(a, int):
        raise TypeError('Must be int, not {0}'.format(type(a).__name__))
    if a < 1: 
        raise ValueError('Given integer must be greater than 1, not {0}'.format(a))
    
    path = [a]
    while a != 1:
        if a % 2 == 0:
            a = a // 2
        else:
            a = 3*a +1
        path += [a]
    return path, len(path)

def main():
    num = 4
    path , length = n31(num)
    print("The Collatz sequence of {0} took {1} steps. \nPath: {2}".format(num,length, path))

if __name__ == '__main__':
    main()