MOD = 1000000007 # Modulo value def find_valid_placements(test_cases, notes): results = [] for i in range(test_cases): s = notes[i] n = len(s) total_unknowns = s.count('.') valid_placements = 1 << total_unknowns # 2^total_unknowns # Iterate through each kilometer of road and update valid_placements based on the markings for j in range(n): if s[j] == '<': valid_placements = valid_placements >> 1 elif s[j] == '>': valid_placements = valid_placements << 1 elif s[j] == '=': valid_placements = valid_placements elif s[j] == 'o': valid_placements = valid_placements valid_placements = valid_placements & ((1 << total_unknowns) - 1) # Add the number of valid placements to the results list results.append(valid_placements) return results # Read input t = int(input()) # Number of test cases notes = [] for _ in range(t): notes.append(input().strip()) # Find valid placements for each test case results = find_valid_placements(t, notes) # Print results for i in range(t): print("Case #{}: {}".format(i+1, results[i] % MOD))