접전 (Large)

같은 길이의 두 숫자 문자열에서 물음표를 채워 두 점수의 차이를 최소로 만들고, 차이가 같으면 C를, 그다음 J를 최소로 만든다.

보통7동적 계획법그리디문자열구현면접 대비아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

당신은 스포츠 역사상 가장 중요한 경기를 관람하고 있다. 원심력 범블퍼피(Centrifugal Bumble-Puppy) 세계 결승전에서 Oceania Coders와 Eurasia Jammers가 맞붙었다. 그런데 경기를 너무 기대한 나머지 잠을 설쳐서 경기 도중 잠이 들고 말았다!

지금 전광판에는 두 팀의 점수가 표시되어 있다. 전광판은 정해진 자릿수만큼 숫자를 표시하므로 점수 앞에 0이 하나 이상 붙어 있을 수도 있다. 당신이 자는 동안 강한 공에 맞아 전광판의 전구 일부가 망가졌고, 그래서 한 팀 또는 두 팀 점수의 숫자 중 하나 이상이 보이지 않는다.

당신은 접전일수록 경기가 재미있다고 생각하므로 두 점수가 최대한 가깝다고 상상하고 싶다. 보이지 않는 숫자를 모두 채워서 두 점수 차의 절댓값을 최소로 만들어 보자. 절댓값의 최솟값을 만드는 방법이 여러 가지라면 Coders의 점수가 가장 작은 방법을 고른다. 그래도 방법이 여러 가지라면 Jammers의 점수가 가장 작은 방법을 고른다.

입력

첫째 줄에 테스트 케이스의 수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다. 각 테스트 케이스는 한 줄로 이루어지며, 길이가 같고 비어 있지 않은 두 문자열 CCJJ가 공백으로 구분되어 주어진다. 두 문자열은 숫자(0부터 9)와 물음표로만 이루어지며, 각각 당신이 보고 있는 Coders와 Jammers의 점수를 나타낸다. 각 테스트 케이스에는 물음표가 적어도 하나 있다.

  • 1T2001 \le T \le 200
  • CCJJ의 길이는 같다.
  • 11 \le (CCJJ의 길이) 18\le 18

출력

각 테스트 케이스마다 Case #x: c j 형식으로 한 줄을 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, cCC의 물음표를 숫자로 바꾼 문자열, jJJ의 물음표를 숫자로 바꾼 문자열이다. 이때 cj가 나타내는 정수의 차의 절댓값이 최소가 되어야 한다. 차의 절댓값이 같은 답이 여러 개라면 c가 가장 작은 답을 출력하고, 차의 절댓값과 c의 값이 모두 같은 답이 여러 개라면 j가 가장 작은 답을 출력한다.

cj는 앞의 0을 포함해 입력 문자열과 같은 길이로 출력한다.

힌트

예제의 네 번째 테스트 케이스에서 답은 15 10이 될 수 없다. 차의 절댓값은 최소이지만 Coders의 점수가 최소가 아니기 때문이다. 05 10도 답이 될 수 없다. 차의 절댓값과 Coders의 점수는 최소이지만 Jammers의 점수가 최소가 아니기 때문이다.