Repeat essentially the last week's lab to develop the function: /* Takes as input n vectors in the array named vectors. Returns m, the number of linearly independent * vectors in the array. */ int dim_basis(Vector vectors[], int n); Here, Vector is a new type defined as: typedef struct { int dim; // dimension of the vector float *elements; // pointer to the elements of vector } Vector; You must use the following function to implement the above: /* Takes as input n linearly independent vectors in array named vectors and another * vector u. All vectors are of the same dimension. Returns 1 is u is linearly independent of vectors in the array, otherwise * returns 0. */ int check_vector_dep(Vector vectors[], int n, Vector u); For this function, use the following algorithm to implement: 1. Let d be the dimension of all the vectors. 2. If n == d then return 0; // u is then clearly linearly dependent on vectors. 3. Let A be the matrix formed by putting all vectors in the array and u together as columns. 4. If n == d-1 then compute the determinant of the A (A is a square matrix). Return 1 if determinant is non-zero, return 0 otherwise. 4. If n < d-1 then consider the rows of A. Each row vector is of n+1 < d dimensions, and there are d such vectors. 5. Recursively call dim_basis on these d vectors of dimension n+1 to compute the number of linearly independent vectors. 6. If this number is n+1 (maximum possible), then return 1, otherwise return 0. DO NOT use Matrix type defined in the class (otherwise you will have to rewrite a whole bunch of functions. Use two dimensional array of floats for matrices as before with fixed dimension (so matrices are still square matrices). Therefore, you should not actually form the matrix A in step 3 above unless n is d-1 (then A is a square matrix). If n < d-1, directly create the appropriate array of vectors. Put these functions in a new file called "matrix-linear-dep.c". Write a main() function (in a separate file) that reads a square matrix and outputs its rank using the above function.