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

char *nacitajRiadok(FILE *f) {
    /* Funkcia zo suboru f nacita znaky az po koniec riadku
     * alebo koniec suboru a nacitane znaky bez znaku konca riadku
     * vrati ako spravne ukonceny retazec v alokovanom poli znakov. */

    int velkostPola = 2;  // velkost alokovaneho pola
    int pocetZnakov = 0;  // pocet znakov pridanych do pola
    char *riadok;         // smernik na prvy prvok pola

    // opakovane nacitavame znaky zo vstupu
    while (true) {

        // ak dalsi znak nie je kam ulozit, zvacsime pole
        if (pocetZnakov == velkostPola) {
            velkostPola = velkostPola * 2;
        }
        assert(pocetZnakov < velkostPola);

        // nacitame jeden znak
        int c = getc(f);

        // ak sme narazili na koniec riadku alebo vstupu, skoncime
        if (c == '\n' || c == EOF) {
            riadok[pocetZnakov] = 0;
            return riadok;
        }

        // pridame znak c do pola
        riadok[pocetZnakov] = c;
        pocetZnakov++;
    }
}


char *otocRetazec(char *retazec) {
    /* Funcia dostane retazec a vrati
     * jeho kopiu s otocenym poradim znakov. */
    int n = strlen(retazec);
    char *novy;
    for (int i = 0; i < n; i++) {
        novy[i] = retazec[n - i - 1];
    }
    novy[n] = 0;
    return novy;
}

int main() {
    // otvorime vstupny subor
    FILE *fin = fopen("vstup.txt", "r");
    assert(fin);

    int cisloRiadku = 0;
    while (true) {

        // nacitame dalsi riadok
        char *riadok = nacitajRiadok(fin);
        cisloRiadku++;

        // ak sme na konci suboru a riadok je prazdny, koncime
        if (feof(fin) && strlen(riadok) == 0) {
            break;
        }

        // vypiseme bud riadok alebo jeho otocenu verziu
        if (cisloRiadku % 2 == 0) {
            char *naopak = otocRetazec(riadok);
            printf("%s\n", naopak);
        } else {
            printf("%s\n", riadok);
        }
    }

    // zavrieme vstupny subor
    fclose(fin);
}
