/*
 * Problema 1
 *
 */

# include <stdio.h>
# include <ctype.h>

void incrementeaza_timp(int *h, int *m, int *s, char *sufix)
{
        (*s)++;

        sufix[0]=toupper(sufix[0]);
        sufix[1]=toupper(sufix[1]);

        if (*s>59) {
                *s=0;
                (*m)++;
                }
        else return;

        if (*m>59) {
                *m=0;
                (*h)++;
                }
        else return;

        if (sufix[0]=='P'&&*h>=12) {
                *h=0;
                sufix[0]='A';
                return;
                }

        if (sufix[0]=='A'&&*h>=13) {
                *h=1;
                sufix[0]='P';
                return;
                }
}

int main()
{
        int h,m,s;
        char sufix[3];

        scanf("%d %d %d %s",&h,&m,&s,sufix);

        incrementeaza_timp(&h,&m,&s,sufix);

        printf("%02d:%02d:%02d %s\n",h,m,s,sufix);

        return 0;
}
/*
 * Problema 2
 *
 */

# include <stdio.h>
# include <limits.h>
# include <stdlib.h>
# include <math.h>

# define EPS 1e-5

void panta(int x1, int y1, int x2, int y2, float *m, float *n)
{
        if (x1==x2){
                *m=INT_MAX;
                *n=0;
                return;
        }

        if (x2<x1){
                panta(x2,y2,x1,y1,m,n);
                return;
        }

        *m=((float)(y2-y1))/(x2-x1);
        *n=y1-(*m)*x1;
}

int main()
{
        int x1,x2,y1,y2,xverif,yverif;
        float m1,m2,n1,n2;

        printf("Primul punct: ");
        scanf("%d%d",&x1,&y1);

        printf("Al doilea punct: ");
        scanf("%d%d",&x2,&y2);

        printf("Punctul de verificare: ");
        scanf("%d%d",&xverif,&yverif);

        panta(x1,y1,x2,y2,&m1,&n1);
        panta(x1,y1,xverif,yverif,&m2,&n2);

        if (abs(m1-m2) <= EPS)
                printf("DA\n");
        else
                printf("NU\n");

        return 0;
}

/*
 * Problema 3
 *
 */

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

char* strdel(char* p, int n)
{
        //caz 1: nu exista mai mult de n caractere incepand de la pozitia p
        if (strlen(p)<=n) {
                *p='\0';
                return p;
                }

        //in caz contrar, facem stergerea copiind caracterele de la p+n peste cele de la p
        strcpy(p,p+n);
        return p;
}

char* strins(char* p, char *s)
{
        //pas 1: copiem sirul din p intr-o alta locatie
        char *tail_p=strdup(p);

        //pas 2: copiem la pozitia p noul sir
        strcpy(p,s);

        //pas 3: copiem la sfarsit caracterele care existau inainte in p
        strcat(p,tail_p);

        return p;
}

int main()
{
        char s[100],replacethis[100],withthis[100];

        scanf("%s %s %s",s,replacethis,withthis);

        char *p;

        // pornim cu p fiind prima aparitie a sirului <replacethis> in sirul <s>
        // atata timp cat mai exista aparitii, facem inlocuirea si setam "p" ca fiind adresa urmatoarei
        // aparitii a sirului <replacethis> in <s>
        //
        // ATENTIE! este foarte important sa dam p=strstr(p+strlen(withthis),...) pentru ca in caz contrar, programul ar cicla la infinit daca sirul <replacethis> se regaseste in <withthis>
        // Cu alte cuvinte, am inlocui in inlocuire, in locuire, in inlocuire...
        for (p=strstr(s,replacethis);p!=NULL;p=strstr(p+strlen(withthis),replacethis)){
                strdel(p,strlen(replacethis));
                strins(p,withthis);
        }

        printf("%s",s);        

        return 0;
}

/* 
 * Problema 4
 *
 */

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

char* substr(char* src, int n, char* dest)
{
        strncpy(dest,src,n);
        if (n<=strlen(src))
                dest[n]='\0';
        return dest;
}

int main()
{
        char s[100],subs[100];
        int poz,len;

        scanf("%s %d %d",s,&poz,&len);

        substr(s+poz,len,subs);

        printf("%s",subs);

        return 0;
}

/*
 * Problema 5
 *
 */

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

int strdcmp(char* s1, char* s2)
{
        int l1=strlen(s1),l2=strlen(s2);
        if (l1<l2) return -1;
        if (l1>l2) return 1;
        while ((*s1) == (*s2) && (*s1)!='\0'){
                s1++;
                s2++;
                }
        if ((*s1)<(*s2)) return -1;
        if ((*s1)>(*s2)) return 1;
        return 0;
}

int readint()
{
        char buff[100],int_max[100];
        sprintf(int_max,"%d",INT_MAX);
        scanf("%s",buff);
        if (strdcmp(buff,int_max)==1) return -INT_MAX;
        return atoi(buff);
}

int main()
{
        int n=readint();
        
        printf("%d\n",n);

        return 0;
}

/*
 * Problema 6
 *
 */

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

char* next(char* from, char* word)
{
        //pas 1: sarim peste caracterele care sunt diferite de '\0' sau de litere mici
        while ((*from)!='\0'&&((*from)<'a'||(*from)>'z')) from++;

        //daca nu mai sunt litere in from
        if ((*from)=='\0') return NULL;
        
        //pas 2: sarim peste litere
        char *p=from;
        while ((*p)!='\0'&&(*p)>='a'&&(*p)<='z') p++;

        //pas 3: copiem in word (p-from) caractere
        strncpy(word,from,p-from);
        word[p-from]='\0';

        return p;
}

int main()
{
        char buff[100],*p,cuv[100];

        gets(buff);

        for (p=next(buff,cuv);p!=NULL;p=next(p,cuv))
                printf("%s ",cuv);

        return 0;
}