>>547
#include<stdio.h>
#include<stdlib.h>
typedef struct stack_impl_tag {struct stack_impl_tag *prev; char data;} StackImpl;
typedef struct stack_tag {StackImpl* ptr;} Stack;
int StackPush(Stack *s, char x) {
    StackImpl *temp;
    if (s->ptr) {
        if (!(temp = (StackImpl*)malloc(sizeof(StackImpl)))) return 0;
        temp->prev = s->ptr; s->ptr = temp;
    } else {
        if (!(s->ptr = (StackImpl*)malloc(sizeof(StackImpl)))) return 0;
        s->ptr->prev = NULL;
    }
    s->ptr->data = x;
    return 1;
}
int StackPop(Stack *s, char *x) {
    StackImpl *temp;
    if (!s->ptr) return 0;
    *x = s->ptr->data; temp = s->ptr->prev; free(s->ptr);
    if (temp) s->ptr = temp; else s->ptr = NULL;
    return 1;
}
void StackInit(Stack *s) {s->ptr = NULL;}
void StackFree(Stack *s) {char temp; while (StackPop(s, &temp)) {}}
int main(void) {
    Stack s; int i; char c; StackInit(&s);
    while ((i = getchar()) != EOF && i != '\n') StackPush(&s, (char)i);
    while (StackPop(&s, &c)) putchar(c);
    StackFree(&s); return 0;
}