MOD = 10**9 + 7 def count_compatible_placements(s): n = len(s) left = [0] * n # left[i] is the index of the leftmost gold nugget that can appear in i-th position right = [0] * n # right[i] is the index of the rightmost gold nugget that can appear in i-th position for i in range(n): if s[i] == '<': left[i] = i elif i > 0: left[i] = left[i-1] if s[n-i-1] == '>': right[n-i-1] = n-i-1 elif i > 0: right[n-i-1] = right[n-i] total_placements = pow(2, s.count('.'), MOD) compatible_placements = 0 for i in range(n): if s[i] == 'o': continue leftmost_gold = left[i] if s[i] == '<' else i rightmost_gold = right[i] if s[i] == '>' else i available_positions = rightmost_gold - leftmost_gold + 1 if s[i] == '=': available_positions = min(available_positions, 1) compatible_placements = (compatible_placements + pow(2, available_positions, MOD)) % MOD return (compatible_placements * total_placements) % MOD T = int(input()) for case in range(1, T+1): s = input().strip() result = count_compatible_placements(s) print(f"Case #{case}: {result}")