#include<stdio.h>
#include<stdlib.h>
#define SIZE 5
struct Node
{
    int data;
    struct Node *next;
}*Hash[SIZE];

void create_Hashchain()
{
    int i = 0, key = 0, index = 0;
    struct Node *temp, *newnode;
    for(i = 0; i < SIZE; i++)
        Hash[i] = NULL;
    
    for(i = 0; i < SIZE; i++)
    {
        printf("Enter your key:\n");
        scanf("%d", &key);
        
        index = key % SIZE;
        
        newnode =(struct Node *)malloc(sizeof(struct Node));
        newnode->data = key;
        newnode->next = NULL;
        if(Hash[index] == NULL)
            Hash[index] = newnode;
            
        else
        {
            temp = Hash[index];
            while(temp->next != NULL)
                temp = temp->next;
            temp->next = newnode;
        }
    }
    for(i = 0; i < SIZE; i++)
    {
        printf("%d -> ", i);
        struct Node *temp = Hash[i];
        while(temp)
        {
            printf("%d ", temp->data);
            temp = temp->next;
        }
        printf("\n");
    }
}
void create_Hash()
{
    int hash[SIZE];
    int i = 0, index = 0, key = 0;
    for(i = 0; i < SIZE; i++)
        hash[i] = -1;
    for(i = 0; i < SIZE; i++)
    {
        printf("Enter your key:\n");
        scanf("%d", &key);
        
        index = key % SIZE;
        
        while(hash[index]!= -1)
        {
            index = (index + 1)%SIZE;
        }
        hash[index] = key;
    }
    for(int i = 0; i < SIZE; i++)
        printf("%d -> %d\n", i, hash[i]);
}

int main()
{
    create_Hashchain();
    create_Hash();
    return 0;
}