## matrix_mult

### Instructions

Implement the methods:

- `number_of_cols`: which returns the number of columns in the matrix.
- `number_of_rows`: which returns the number of rows in the matrix.
- `row`: which returns the `n`th row in the matrix.
- `col`: which returns the `n`th column in the matrix.

Define the matrix multiplication by implementing the `std::ops::Mul` for the type matrix

### Expected Functions

```rust
impl Matrix<T> {
	pub fn number_of_cols(&self) -> usize {
	}

	pub fn number_of_rows(&self) -> usize {
	}

	pub fn row(&self, n: usize) -> Vec<T> {
	}

	pub fn col(&self, n: usize) -> Vec<T> {
	}
}

impl Mul for Matrix<T> {
}
```

### Usage

Here is a program to test your function.

```rust
fn main() {
	let matrix: Matrix<u32> = Matrix(vec![vec![3, 6], vec![8, 0]]);
	println!("{:?}", matrix.col(0));
	println!("{:?}", matrix.row(1));

	let matrix_1: Matrix<u32> = Matrix(vec![vec![0, 1], vec![0, 0]]);
	let matrix_2: Matrix<u32> = Matrix(vec![vec![0, 0], vec![1, 0]]);
	let mult = matrix_1.clone() * matrix_2.clone();
	println!("{:?}", mult);
	println!("{:?}", matrix_1.number_of_cols());
	println!("{:?}", matrix_2.number_of_rows());
}
```

And its output

```console
$ cargo run
[3, 8]
[8, 0]
Some(Matrix([[1, 0], [0, 0]]))
2
2
$
```
