#include using namespace std; const int MOD = 1e9 + 7; const int MAX_N = 5e5 + 5; int T, n, pref[MAX_N], suff[MAX_N], same[MAX_N]; char s[MAX_N]; int main() { cin >> T; for (int t = 1; t <= T; ++t) { cin >> (s + 1); n = strlen(s + 1); pref[0] = suff[n + 1] = same[0] = 1; for (int i = 1; i <= n; ++i) { if (s[i] == '<') pref[i] = 2 * pref[i - 1] % MOD; else pref[i] = pref[i - 1]; if (s[n - i + 1] == '>') suff[n - i + 1] = 2 * suff[n - i + 2] % MOD; else suff[n - i + 1] = suff[n - i + 2]; if (s[i] == '=' || s[n - i + 1] == '=') same[i] = 2 * same[i - 1] % MOD; else if (s[i] == '<' && s[n - i + 1] == '>') same[i] = same[i - 1]; else same[i] = 0; } int ans = 0; for (int i = 1; i <= n; ++i) { if (s[i] == '.') { int left = i - 1, right = i + 1; while (left >= 1 && s[left] == '.') --left; while (right <= n && s[right] == '.') ++right; int cnt = 0; if (left == 0 || s[left] == '<') cnt = (cnt + pref[i - 1]) % MOD; if (right == n + 1 || s[right] == '>') cnt = (cnt + suff[i + 1]) % MOD; if (left > 0 && s[left] == '=') cnt = (cnt + same[i - left]) % MOD; if (right < n + 1 && s[right] == '=') cnt = (cnt + same[right - i]) % MOD; ans = (ans + cnt) % MOD; } } cout << "Case #" << t << ": " << ans << endl; } return 0; }