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

struct data {
  char *name;
  struct data *next;
};

static struct data *alloc_data(char *name)
{
  struct data *data;

  data = calloc(1, sizeof(*data));
  if (data == NULL)
    return NULL;

  data->name = calloc(1, strlen(name));
  if (data->name == NULL)
    goto err;

  strcpy(data->name, name);
  data->next = NULL;
  return data;

 err:
  free(data);
  return NULL;
}

static void free_data(struct data *data)
{
  free(data->name);
  free(data);
}

static struct data *append_list(struct data *list, char *name)
{
  struct data *top;

  if (list == NULL) {
    list = alloc_data(name);
    return list;
  }

  top = alloc_data(name);
  top->next = list;
  return top;
}

static void free_list(struct data *list)
{
  while (list != NULL) {
    struct data *data = list->next;
    free_data(list);
    list = data;
  }
}

static void print_list(struct data *list)
{
  while (list != NULL) {
    printf("%s\n", list->name);
    list = list->next;
  }
}

int main(void)
{
  struct data *list;
  int i;
  char *buffer;

  buffer = calloc(1, 128);
  if (buffer == NULL)
    return 1;

  list = NULL;
  for (i = 0; i < 10; i++) {
    memset(buffer, 0, 128);
    scanf("%127s", buffer);
    list = append_list(list, buffer);
  }

  print_list(list);

  free_list(list);
  free(buffer);

  return 0;
}
