this program print the matrix in spiral form this problem has been solved through recursive way matrix must satisfy below conditions i matrix should be only one or two dimensional ii number of column of all rows should be equal must be spiralprintclockwise1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 8 12 11 10 9 5 6 7 horizotal printing increasing vertical printing down horizotal printing decreasing vertical printing up other easy to understand approach spiraltraversal1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 8 12 11 10 9 5 6 7 example matrix 1 2 3 4 5 6 7 8 9 10 11 12 algorithm step 1 first pop the 0 index list which is 1 2 3 4 and concatenate the output of step 2 step 2 now perform matrixs transpose operation change rows to column and vice versa and reverse the resultant matrix step 3 pass the output of 2nd step to same recursive function till base case hits dry run stage 1 1 2 3 4 spiraltraversal 8 12 7 11 6 10 5 9 stage 2 1 2 3 4 8 12 spiraltraversal 11 10 9 7 6 5 stage 3 1 2 3 4 8 12 11 10 9 spiraltraversal 5 6 7 stage 4 1 2 3 4 8 12 11 10 9 5 spiraltraversal 5 6 7 stage 5 1 2 3 4 8 12 11 10 9 5 spiraltraversal6 7 stage 6 1 2 3 4 8 12 11 10 9 5 6 7 spiraltraversal driver code must be spiral_print_clockwise 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 8 12 11 10 9 5 6 7 horizotal printing increasing vertical printing down horizotal printing decreasing vertical printing up other easy to understand approach spiral_traversal 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 8 12 11 10 9 5 6 7 example matrix 1 2 3 4 5 6 7 8 9 10 11 12 algorithm step 1 first pop the 0 index list which is 1 2 3 4 and concatenate the output of step 2 step 2 now perform matrix s transpose operation change rows to column and vice versa and reverse the resultant matrix step 3 pass the output of 2nd step to same recursive function till base case hits dry run stage 1 1 2 3 4 spiral_traversal 8 12 7 11 6 10 5 9 stage 2 1 2 3 4 8 12 spiral_traversal 11 10 9 7 6 5 stage 3 1 2 3 4 8 12 11 10 9 spiral_traversal 5 6 7 stage 4 1 2 3 4 8 12 11 10 9 5 spiral_traversal 5 6 7 stage 5 1 2 3 4 8 12 11 10 9 5 spiral_traversal 6 7 stage 6 1 2 3 4 8 12 11 10 9 5 6 7 spiral_traversal type ignore driver code
def check_matrix(matrix: list[list[int]]) -> bool:
    
    matrix = [list(row) for row in matrix]
    if matrix and isinstance(matrix, list):
        if isinstance(matrix[0], list):
            prev_len = 0
            for row in matrix:
                if prev_len == 0:
                    prev_len = len(row)
                    result = True
                else:
                    result = prev_len == len(row)
        else:
            result = True
    else:
        result = False

    return result


def spiral_print_clockwise(a: list[list[int]]) -> None:
    
    if check_matrix(a) and len(a) > 0:
        a = [list(row) for row in a]
        mat_row = len(a)
        if isinstance(a[0], list):
            mat_col = len(a[0])
        else:
            for dat in a:
                print(dat)
            return

        
        for i in range(mat_col):
            print(a[0][i])
        
        for i in range(1, mat_row):
            print(a[i][mat_col - 1])
        
        if mat_row > 1:
            for i in range(mat_col - 2, -1, -1):
                print(a[mat_row - 1][i])
        
        for i in range(mat_row - 2, 0, -1):
            print(a[i][0])
        remain_mat = [row[1 : mat_col - 1] for row in a[1 : mat_row - 1]]
        if len(remain_mat) > 0:
            spiral_print_clockwise(remain_mat)
        else:
            return
    else:
        print("Not a valid matrix")
        return





def spiral_traversal(matrix: list[list]) -> list[int]:
    
    if matrix:
        return list(matrix.pop(0)) + spiral_traversal(list(zip(*matrix))[::-1])  
    else:
        return []



if __name__ == "__main__":
    import doctest

    doctest.testmod()

    a = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
    spiral_print_clockwise(a)