import sys S = sys.stdin.read().strip().splitlines() if not S: sys.exit(0) # S[0]~S[T] それぞれがテストケース T = int(S[0]) ans = [] line = 1 for _ in range(T): s = S[line].strip() line += 1 n = len(s) res = [] # 出力文字列のリスト in_token = False # 現在数字(項)の中か # token_sign: 現在の項の符号(+1 か -1) # 項の開始は,先頭なら自動的に正とする. token_sign = 1 token_len = 0 # 現在の項の長さ(数字の個数) for i, ch in enumerate(s): if ch != '?': # 固定文字の場合 if ch in '+-': # ch は演算子 res.append(ch) in_token = False token_len = 0 # 演算子の意味するところで次の項の符号を決める token_sign = 1 if ch=='+' else -1 else: # ch は数字 res.append(ch) # ここは数字でなければならないので in_token = True token_len += 1 continue # ch == '?' # ここは自由に置換可能. if not in_token: # 「項の開始位置」では必ず数字を選ぶ. if token_sign > 0: res.append('9') else: res.append('1') in_token = True token_len = 1 else: # すでに項中 if token_sign > 0: # 正の項なら,項を伸ばすほうが大きくなる. res.append('9') token_len += 1 else: # 負の項ならできるだけ項は短いほうがよい. # もしすでに1桁以上あり,かつ「ここで項を終えて演算子にしてもよい」なら # ・末尾でなければ(i < n-1) # ・次の文字が固定の演算子でない(もし '?' ならあとで数字にできる) if token_len >= 1 and i < n-1 and s[i+1] not in '+-': # ここで項を終える.新しい項は演算子で始めるので, # 次の項は自由に正にできる(+ を選ぶ). res.append('+') in_token = False token_len = 0 token_sign = 1 else: # 終われないので,数字として延長. res.append('1') token_len += 1 # 最後の文字は必ず数字になるように(状態が in_token=True であるはず) ans.append(''.join(res)) sys.stdout.write("\n".join(ans))