#include #include char * readlinef(FILE *stream) { int buffer_len = 0; int len = 0; char *buffer; while (1) { int c = fgetc(stream); switch (c) { case '\n': if (!len) continue; case EOF: if (buffer) buffer[len] = '\0'; return buffer; default: if (len >= buffer_len) { buffer_len = buffer_len * 2 + 100; buffer = (char *)realloc(buffer, buffer_len + 1); } buffer[len++] = c; } } } void reverse(char *start, char *end) { while (start < --end) { char tmp = *end; *end = *start; *(start++) = tmp; } } char * skip_spaces(char *p) { while (isspace(*p)) p++; return p; } char * skip_word(char *p) { while (*p && !isspace(*p)) p++; return p; } int main(int argc, char *argv[]) { char *line; while (line = readlinef(stdin)) { char *start = line; while (1) { char *word_start = skip_spaces(start); char *word_end = skip_word(word_start); if (word_start == word_end) { if (start != line) start--; break; } reverse(start, word_end); start += word_end - word_start; if (*start == '\0') break; start++; } reverse(line, start); *start = '\0'; fprintf(stdout, "%s\n", line); free(line); } }