아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

미스터리 제곱수 (Large)

시간 제한60초메모리 제한512 MB

요약
이진 문자열의 각 ?를 0 또는 1로 채워 완전제곱수의 이진 표현으로 만듭니다.
난이도

어려움10점 중 8점

유형
정수론, 백트래킹, 비트 연산
정답자
아직 제출이 없습니다

문제

완전제곱수 하나를 이진법으로 적은 뒤 몇 개의 자리를 '?'로 가렸다. 가려진 문자열 S가 주어지면 원래 수를 복원하라. '?'가 아닌 자리는 그대로 두고, 각 '?'를 '0' 또는 '1'로 바꿔서 어떤 완전제곱수의 이진 표현이 되도록 만들면 된다. 문자열의 길이는 그대로이므로 맨 앞에 0을 덧붙일 수 없다.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 다음 T개의 줄에 문자열 S가 한 줄에 하나씩 주어진다. S는 완전제곱수를 이진법으로 적은 다음 일부 자리를 '?'로 바꾼 문자열이다.

출력

각 테스트 케이스마다 Case #x: N 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, N은 S의 각 '?'를 '0' 또는 '1'로 바꿔서 얻은 완전제곱수의 이진 표현이다.

제한

  • 1≤T≤251 \le T \le 25
  • S의 첫 글자는 '1'이다.
  • S는 '0', '1', '?'로만 이루어져 있다.
  • 모든 테스트 케이스에서 가능한 N은 정확히 하나이다.
  • S의 길이는 125 이하이다.
  • S에 들어 있는 '?'는 40개 이하이다.

예제1

  1. 예제 1

    입력
    3
    1???
    1
    10??110??00??1000??
    
    예상 출력
    Case #1: 1001
    Case #2: 1
    Case #3: 1011110110000100001