def getint(): return int(input()) def getints(): return list(map(int, input().split())) def getintsm1(): return [int(x)-1 for x in input().split()] modulus = 10**9 + 7 T = int(input()) for caseno in range(T): S = input() last = {c: 0 for c in '<=>o.'} lrf = [0] nrf = [0] sleq = 0 pos = 1 csum = [0, 0] canstart = 1 for c in S: lrf.append(last['>']) if c == '>': for _ in range(last['>'], pos): nrf.append(pos) result = 0 if c in 'o.': result += canstart cutoff = max(last['o'], pos - 2 * (pos - last['<']) + 1) leq = last['='] if leq >= cutoff: eqpos = pos - 2 * (pos - leq) if eqpos >= cutoff and lrf[leq] < eqpos and sleq < eqpos: result += csum[eqpos+1] - csum[eqpos] cutoff = leq + 1 epos = pos while epos > cutoff: lr = lrf[epos] result += csum[epos] - csum[max(lr, cutoff)] epos = pos - 2 * (pos - lr) while epos > cutoff and nrf[epos] < lr: lr = nrf[epos] epos = pos - 2 * (pos - lr) csum.append((csum[-1] + result) % modulus) if c == '=': sleq = last['='] last[c] = pos if c in '<=o': canstart = 0 pos += 1 cutoff = max(last['o'], last['>'], last['=']) result = csum[pos] - csum[cutoff] result %= modulus print(f"Case #{caseno + 1}: {result}")