eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків

base64

Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB

Потрібно написати конвертор у формат base64 та з формату base64.

Кодування в формат base64 відбувається наступним чином:

1. Якщо довжина вхідного тексту в байтах не ділиться на 3, то він доповнюється мінімальною кількістю нульових байтів так, щоб довжина ділилась на 3, кількість доданих байтів запам'ятовується.

2. Текст розбивається на групи по 3 байти. Кожна група кодується окремо.

3. З трьох байтів отримується 24-бітне число. Перший байт трійки є старшим, третій — молодшим.

4. 24-бітне число розбивається на чотири 6-бітні групи. Старші 6 біт визначають перший символ кодуючої четвірки, молодші 6 біт — останній і т.п.

5. Шестірки бітов кодуються символами наступного набору:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

Номер 0 кодується буквою 'A', номер 1 буквою 'B', номер 63 символом '/'.

6. Отримані четвірки символів записуаються одна за одною у тому ж порядку, у якому йшли трійки, з яких вони були отримані.

7. Згадується, скільки нульових символів було додано в кінець вхідного тексту на кроці 1, і стільки останніх символів закодованого тексту замінюється на '='.

8. Текст розбивається на групи по 76 символів (в останній може бути менше) і кожна така група записується в окремому рядку. Кожен непустий рядок повинен закінчуватись переводенням рядка (символи 1310).

Вхідні дані

У першому рядку міститься тип інформації у вхідному файлі, другий рядок пустий, далі йде інформація, яку потрібно закодувати чи розкодувати.

Якщо потрібно закодувати текст, то файл починається символами 'Content-Transfer-Encoding: 8bit', за якими йде 4 символи 13101310 — і весь залишок файлу — набір байтів, які підлягають кодуванню. Об'єм кодованого тексту ("текст" може бути двійковими даними) не перевищує 100 000 байт.

Якщо потрібно декодувати текст, то файл починається символами 'Content-Transfer-Encoding: base64', за якими йде 4 символи 13101310 — і весь залишок файлу — текст, закодований base64. Закодований текст, отриманий з заданого, не перевищує 100 000 байт.

Вихідні дані

Виведіть рядок з протилежним типом інформації, потім пустий рядок, потім результат кодування або декодування.

Якщо потрібно було закодувати текст, то вихідні дані повинні починатись символами 'Content-Transfer-Encoding: base64', за якими повинні йти 4 символи 13101310 — і далі до кінця файлу повинен міститись текст, закодований base64.

Якщо потрібно було розкодувати текст, то вихідні даніе повинні починатись символами 'Content-Transfer-Encoding: 8bit', за якими повинні йти 4 символи 13101310 — і далі до кінця файлу повинен міститись розкодований текст.

Приклад

Вхідні дані #1
Content-Transfer-Encoding: 8bit

Vologda SPU
Вихідні дані #1
Content-Transfer-Encoding: base64

Vm9sb2dkYSBTUFU=
Автор Володимир Пінаєв, Федір Меньшико