종이 접기 좌표

시간 제한1초메모리 제한128 MB

요약
종이 띠를 위 접기와 아래 접기로 n번 접은 뒤 직각으로 펼쳤을 때, m번째 지점의 좌표를 구한다.
난이도

보통10점 중 7점

유형
재귀, 분할 정복, 구현, 수학
정답자
아직 제출이 없습니다

문제

종이 띠가 하나 있고, 이 띠를 다음 두 가지 방법 중 하나로 반복해서 접는다.

  • 위로 접기(U): 띠의 오른쪽 끝을 왼쪽 끝 위로 가져와 반으로 접는다. 넘어간 절반이 위쪽에 놓인다.
  • 아래로 접기(L): 띠의 오른쪽 끝을 왼쪽 끝으로 가져와 반으로 접는다. 넘어간 절반이 아래쪽에 놓인다.

여러 번 접은 뒤, 다시 펼치면서 모든 접힌 자국(주름)을 정확히 90도 직각으로 벌린다. 그러면 띠는 단위 길이의 선분들이 직각으로 이어진 경로가 된다.

펼친 띠의 왼쪽 끝을 원점 (0,0)(0,0)에 두고, 첫 번째 직각이 (1,0)(1,0)에 오도록 한다. 접는 순서와 종이 위의 한 위치가 주어질 때, 그 위치의 좌표를 구하라.

입력

첫 줄에는 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스는 한 줄로 이루어지며, 문자 U와 L로 된 문자열과 정수 mm이 차례로 주어진다. 문자열은 접는 순서를 왼쪽에서 오른쪽으로 나타내며, 그 길이 nn은 1≤n≤301 \le n \le 30을 만족한다.

nn번 접었다가 펼치면 띠는 2n2^n개의 단위 선분으로 나뉘고, 그 사이에 2n−12^n - 1개의 직각이 생긴다. mm은 종이 위의 위치를 가리킨다.

  • m=0m = 0은 왼쪽 끝으로, (0,0)(0,0)이다.
  • m=2nm = 2^n은 띠의 오른쪽 끝이다.
  • 1≤m≤2n−11 \le m \le 2^n - 1인 mm은 직각을 가리킨다. 왼쪽 끝에서부터 세어 m=1m = 1은 첫 번째 직각((1,0)(1,0)), m=2m = 2는 두 번째 직각, ... 이다.

출력

각 테스트 케이스마다 mm이 가리키는 위치의 좌표를 (x,y) 형식으로 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    3
    UL 4
    UL 3
    LLUL 13
    
    예상 출력
    (2,0)
    (2,-1)
    (1,-2)