Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    int size = 0, counter = 0;
    char *data = calloc(size, sizeof(char));
    int length = 1, counter1 = 0;
    char **input = 0;
    do
    {
        input = realloc(input,sizeof(char*) *length);
        printf("Enter a word:");
        size = 0;
        free(data);
        data = 0;

        do
        {
            size++;
            data = realloc(data, size+1);
            *(data+size-1) = fgetc(stdin);
        }
        while(*(data+size-1) != '\n');

        data = realloc(data, size+1);
        *(data+size) = 0;
        input[counter1] = calloc(size+3, sizeof(char));            
        strcpy(input[counter1], data);
        length++;
        counter1++;
    }
     while(strcmp(input[counter1-1], "end\n") != 0);

    counter=0;

    while(counter < counter1)
    {
        printf("%s", input[counter]);
        counter++;
    }
        
    
}
Help explain what this code does? Step by step please.. thanks!