Sam은 Sally에게 비밀 메시지를 보내고 싶어 하고, 반대로 Sally도 마찬가지입니다. 두 사람은 손으로 직접 수행할 수 있는 간단하지만 효과적인 암호화 방식을 고안했습니다. 그런데 주고받는 메시지가 점점 길어지자, 이 과정을 자동화하기로 합니다. 여러분의 과제는 이들의 "셰이크, 래틀, 롤(shake, rattle and roll)" 암호화 방식을 구현하는 것입니다. (복호화는 구현하지 않습니다.)
텍스트 메시지를 정사각형 2차원 배열에 행 우선(row-major) 순서로, 한 칸에 한 글자씩 채웁니다. 모든 문자는 대문자로 저장합니다. 메시지가 배열을 완전히 채우지 못하면, 남은 칸은 알파벳 대문자 A부터 Z까지를 순서대로(필요하면 반복하여) 채웁니다. 행렬은 항상 정사각형이며 크기는 3×3부터 100×100까지입니다. 예를 들어, 메시지 "Meet me at the pizza parlor"를 6×6 배열에 넣으면 아래 그림과 같습니다(모든 문자가 대문자로 저장된다는 점에 유의하세요).

메시지를 암호화할 때는 세 가지 연산을 수행합니다. 각 연산은 키에 등장한 횟수만큼, 주어진 순서대로 적용됩니다.
셰이크(Shake) — 열은 1번부터 번호를 매깁니다. 홀수 번째 열은 한 글자씩 위로 이동하며, 맨 위 글자는 그 열의 맨 아래로 돌아옵니다. 짝수 번째 열은 한 글자씩 아래로 이동하며, 맨 아래 글자는 그 열의 맨 위로 돌아옵니다. 예를 들면:

래틀(Rattle) — 행은 위에서부터 1번으로 번호를 매깁니다. 홀수 번째 행은 한 글자씩 오른쪽으로 이동하며, 맨 오른쪽 글자는 그 행의 맨 왼쪽으로 돌아옵니다. 짝수 번째 행은 한 글자씩 왼쪽으로 이동하며, 맨 왼쪽 글자는 그 행의 맨 오른쪽으로 돌아옵니다. 예를 들면:

롤(Roll) — 행렬을 이루는 동심(테두리) "고리(loop)"들을 생각합니다. 각 고리는 그 고리의 가장 윗줄이 몇 번째 행인지로 번호를 매깁니다(가장 바깥 고리의 윗줄은 1번 행). 홀수 번째 고리는 한 글자씩 시계 방향(오른쪽)으로 회전하고, 짝수 번째 고리는 한 글자씩 반시계 방향(왼쪽)으로 회전합니다. 예를 들면:

입력은 하나 이상의 암호화 문제로 이루어집니다. 각 문제는 두 줄을 차지합니다. 첫 번째 줄은 암호화 키이고, 두 번째 줄은 암호화할 텍스트입니다.
암호화 키는 두 자리 행렬 크기로 시작하고, 그 뒤에 S, R, L 문자가 임의의 순서로 이어집니다. S는 셰이크를, R는 래틀을, L은 롤을 각각 한 번 수행하며, 등장한 순서대로 적용됩니다. 크기 00은 100을 의미합니다.
키의 길이는 최대 80자입니다. 각 메시지는 최대 10,000자이며, 항상 지정된 행렬 안에 들어간다고 가정합니다.
각 문제마다 암호화된 텍스트를 한 줄에 하나씩 출력합니다. 암호화된 텍스트의 길이는 행렬 크기의 제곱과 같습니다(예: 3×3 행렬은 길이 9인 문자열을 만듭니다).