MOD = 1000000007 def solve_case(case_number, road): n = len(road) left = [0] * n right = [0] * n unknown = 0 for i in range(n): if road[i] == '<': left[i] = 1 elif road[i] == '>': right[i] = 1 elif road[i] == 'o': left[i] = right[i] = 1 elif road[i] == '=': left[i] = right[i] = 1 unknown += 1 else: unknown += 1 valid = pow(2, unknown, MOD) # number of valid placements with unknown positions for i in range(n): if left[i] and right[i]: continue j = i while j < n and road[j] == '=': j += 1 if j == n or right[j]: valid = 0 # no valid placement exists break k = j while k < n and road[k] == '<': k += 1 if k == n or left[k]: valid = 0 # no valid placement exists break if left[i]: left[i:j] = [1] * (j - i) if right[j]: right[k-1:j-1:-1] = [1] * (j - i) for i in range(n): if left[i] == 0 and right[i] == 0: valid = 0 break result = valid % MOD print(f"Case #{case_number}: {result}") t = int(input()) for case_number in range(1, t+1): road = input().strip() solve_case(case_number, road)