Consider the following C implementation of a hash table:…

Consider the following C implementation of a hash table: #include#define HASH_SIZE 10struct bucket {    char* string;    struct bucket* next;};typedef struct bucket Bucket;Bucket table[HASH_SIZE];//hash table… unsigned hash(char* key) {    unsigned val = 0;    while (*key)        val = *(key++) + 2 * val;    return val % HASH_SIZE;}void init() {//initialize the buckets of my hash table…    int i;    for (i = 0; i < HASH_SIZE;i++)        table[i].string = NULL;}void printHashTable() {    int i = 0;    Bucket* iterator;    for (; i < HASH_SIZE; i++)        if (table[i].string) {//not an empty bucket            iterator = &table[i];//head of linked list            while (iterator) {                printf("%s\n", iterator->string);                iterator = iterator->next;//advances the iterator…            }        }}int insert(char* word) {    if (search(word))        return 0;//duplicate value, do not add it to the hash table!    unsigned index = hash(word);    if (table[index].string == NULL) {//empty bucket        table[index].string = (char*)malloc(strlen(word) + 1);        strcpy(table[index].string, word);        table[index].next = NULL;        return 1;//successful insert    }    char* currentHeadOfLinkedList = table[index].next;    table[index].next = (Bucket*)malloc(sizeof(Bucket));    table[index].next->string = (char*)malloc(strlen(word) + 1);    strcpy(table[index].next->string, word);    table[index].next->next = currentHeadOfLinkedList;    return 1;}int search(char* word) {//returns 1 if successful and 0 if not    int i = hash(word);    Bucket* iterator;//link list iterator…    if (table[i].string) {//not an empty bucket        iterator = table + i;//head of linked list        while (iterator) {            if (!strcmp(iterator->string, word))//matched                return 1;            iterator = iterator->next;        }    }    return 0;//unsuccessful search} Also, assume that the following main function uses the hash table to store some strings: main() {    int i;    init();    char* strings[] = { “AB”, “CD”, “EF”, “GH”, “CD” };    for (i = 0; i < 5;i++)        insert(strings[i]);    printHashTable();} Answer the following questions: (10 points) Find the hash value of every member of the strings array. The hash value is calculated and returned by the hash function (Hint: ASCII values of letters A, B, C, ... are 65, 66, 67, etc.) (10 points) What's the output of the given C program.