Write a parallel program using MPI (and not OpeMP) to accomplish the same as the following serial program. For the following serial program the user enters a line and the program outputs the number of occurrences of each printable character (but not the space or tab character). For the parallel program if we have p processes we should divide the line into p segments and let each process counts the characters of its segment. #include<stdio.h> #include<stdlib.h> #include <string.h> #define ASCIIs 127 //ASCII characters from 0 to 127 #define atmost 1000 char letters[atmost + 1]; //Extra location for the string terminator '0' int total_count[ASCIIs]; void find(int count[], int start, int end); int main() { int i, processes, n, start, end; int count[ASCIIs], my_rank, segment, p; printf("Enter a line not larger than 1000 characters.n"); fgets(letters, atmost,stdin); printf("How many segments?: "); scanf("%d", &processes); //To make the length of the divisible by processes: while(strlen(letters) % processes != 0) strcat(letters, " "); n = strlen(letters); for(i = 0; i < ASCIIs; i++) total_count[i] = 0; for(p = 0; p < processes; p++) { my_rank = p; segment = n / processes; start = my_rank * segment; end = start + segment; find(count, start, end); for(i = 0; i <= ASCIIs; i++) total_count[i] += count[i]; } for(i = 33; i < ASCIIs; i++) if(total_count[i] != 0) printf("Number of %c is: %dn", i, total_count[i]); return 0; } void find(int count[], int start, int end) { int i; for(i = 0; i < ASCIIs; i++) count[i] = 0; for(i = start; i < end; i++) count[(int)letters[i]]++; }.