In linear algebra, the transpose of a matrix
**A** is another matrix **A**^{T} (also written **A**′, **A**^{tr},^{t}**A**
or **A**^{t}) created by any one of the following equivalent
actions:

- reflect
**A**over its main diagonal (which runs from top-left to bottom-right) to obtain**A**^{T} - write the rows of
**A**as the columns of**A**^{T} - write the columns of
**A**as the rows of**A**^{T}

Formally, the *i*^{th} row, *j*^{th} column element of
**A**^{T} is the *j*^{th} row, *i*^{th} column element of
**A**:

[**A**^{T}]_{i j} = [**A**]_{j i}

If **A** is an *m* × *n* matrix then
**A**^{T} is an *n* × *m*
matrix.

You have been given a matrix as a 2D list with integers. Your task is to return a transposed matrix based on input.

**Input: ** A matrix as a list of lists with integers.

**Output: **The transposed matrix as a list/tuple of lists/tuples with integers.

**Example:**

checkio([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == [[1, 4, 7], [2, 5, 8], [3, 6, 9]]) checkio([[1, 4, 3], [8, 2, 6], [7, 8, 3], [4, 9, 6], [7, 8, 1]]) == [[1, 8, 7, 4, 7], [4, 2, 8, 9, 8], [3, 6, 3, 6, 1]])

**How it is used: **
The most obvious use for this idea is in mathematical software,
but the concept can be applied in the area of vector graphics.
On a computer, one can often avoid explicitly transposing a matrix in memory by simply accessing the same data in a different order.

**Precondition:**

0 < len(**matrix**) < 10

all(0 < len(row) < 10 for row in **matrix**)