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

char convtable[32] = {
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
        'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
        'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
        'Y', 'Z', ' ', '.', ',', '-', '\'', '?'
};

char * convtable1[32] = {
        "100101",       //"A"
        "10011010",     // B
        "0101",         // C
        "0001",         // D
        "110",          // E
        "01001",        // F
        "10011011",     // G
        "010000",       // H
        "0111",         // I
        "10011000",     // J
        "0110",         // K
        "00100",        // L
        "10011001",     // M
        "10011110",     // N
        "00101",        // O
        "111",          // P
        "10011111",     // Q
        "1000",         // R
        "00110",        // S
        "00111",        // T
        "10011100",     // U
        "10011101",     // V
        "000010",       // W
        "10010010",     // X
        "10010011",     // Y
        "10010000",     // Z
        "101",          //' '
        "010001",       //"."
        "000011",       //','
        "10010001",     //'-'
        "000000",       //'''
        "000001"        // ?
};

int main()
{
        char str[101];
        char tmp[10000], *p, *p2, tmp5[6];
        int strsize, i, wordsize, j = 0, round = 0;
        while ( fgets( str, 101, stdin ) ) {
                //printf( "round %3d => strlen : %3d ::: %s", round, strlen( str ), str );
                if ( str[0] == '\n' ) {
                        continue;
                }

                p = str; p2 = tmp;
                j = 0; round++;
                strsize = 0;
                while ( *p != '\n' && *p != '\0' ) {
                        // *pをインクリメントしながら文字符号表に文字か判定する
                        for ( i = 0 ; i < 32 ; i++ ) {
                                // 入力文字を符号に変換し連結していく
                                if ( convtable[i] == *p ) {
                                        // *pと一致する文字の場合, その符号語分tmpへコピーする
                                        strncpy( p2, convtable1[i], wordsize = strlen( convtable1[i] ) );
                                        //printf( "%c = %s [%d]\n", *p, convtable1[i], strlen( convtable1[i] ) );
                                        // printf( "%s ", convtable1[i] );
                                        // tmpへコピーした文字の符号語の長さ分だけアドレスを加算
                                        p2 += wordsize;
                                        // 一応符号語文字列の長さを記憶
                                        strsize += wordsize;
                                        //*pをインクリメントする
                                        p++;
                                        j++;
                                        break;
                                }
                        }
                }

                // 連結した符号文字列が5の倍数ではない場合, 連結文字列が5の倍数になるように
                // 0をパディングする
                while ( strsize % 5 != 0 ) {
                        *p2 = '0';
                        p2++;
                        strsize++;
                }

                i = 0;
                p2 = tmp;
                // 変換した符号語を5文字区切りで変換する
                while ( i < strsize / 5 ) {
                        strncpy( tmp5, p2, 5 );
                        printf( "%c", convtable[strtol( tmp5, NULL, 2 )] );
                        p2 += 5;
                        i++;
                }
                printf( "\n" );
        }
        return 0;
}



Measured memory_bytes: 2056