Write an MPI program to accomplish the following for a number of processes: Each processes generate a list of ten random integers (including the process with rand zero) in the range 0 to 100, sorts them and sends its sorted 10 numbers to the process with rank zero. The process with rank zero merges all the lists into one list and display them. The serial program for this question is: //a.c #include <stdio.h> #include <stdio.h> #include <stdlib.h> #include<time.h> const int n=10; int *a, *b, *c; void Merge(int a[], int b[], int c[]); void Sort(int* x); int main() { int i; srand(time(0)); a =(int *)malloc(n*sizeof(int)); b =(int *)malloc(n*sizeof(int)); c =(int *)malloc(2*n*sizeof(int)); for(i = 0; i < n; i++) { a[i] = rand()%100; b[i] = rand()%100; } Sort(a); Sort(b); Merge(a, b, c); return 0; } int findIndexOfSmallest(int a[], int n, int from){ int indexOfSmallest = from; int i; for(i = from; i < n; i++) if(a[i] < a[indexOfSmallest]) indexOfSmallest = i; return indexOfSmallest; } void Sort(int* x){ // int* x = (int *)a; int i, indexOfSmallest, t; for(i = 0; i < n ; i++){ indexOfSmallest = findIndexOfSmallest(x, n, i); t = x[i]; x[i] = x[indexOfSmallest]; x[indexOfSmallest] = t; } for(i = 0; i < n; i++) printf("%d, ", x[i]); printf("n------------------------------n"); } void Merge(int a[], int b[], int c[]){ int aIndex = 0, bIndex = 0, cIndex = 0, i; while(aIndex < n && bIndex < n) if(a[aIndex] < b[bIndex]) c[cIndex++] = a[aIndex++]; else c[cIndex++] = b[bIndex++]; while(aIndex < n) c[cIndex++] = a[aIndex++]; while(bIndex < n) c[cIndex++] = b[bIndex++]; for(i = 0; i < 2 * n; i++) printf("%d, ", c[i]); printf("n^^^^^^^^^^^^^^^^^^^^^^^^^^n"); }.