1.) Write a function map, which takes an array, it's size, and a function that takes in an int and returns an int, and then updates the array such that the function is applied to every element. void map(int arr[],int size,int func (int)){ } 2.) Write a function apply, which takes an array, it's size, and a function that takes in two ints, and returns the result of iteratively applying the given function to all the elements in the array. Assume the size of the array given is always 2 or greater 3.) What is the output of the following program #include int f1 (int (*f) (int)); int f2(int i); int main(void) { printf("Answer: %d\n", f1(f2)); return 0; } int f1(int (*f)(int)) { int n = 0; while ((*f)(n)) { n++; } return n; } int f2(int i) { return i * i + i - 12; }