现在定义一种合法的Sticker,比如
”
a
a
b
c
c
”
,
“
c
c
c
c
a
b
”
”aabcc”,“ccccab”
”aabcc”,“ccccab” 。即所有相同的字母要在一起才是合法的。现在请问对于给定的字符串,有多少种合法的结果。
比如:
”
a
a
?
?
b
b
”
”aa??bb”
”aa??bb”合法的字符串有三种。 分别是
“
a
a
a
a
b
b
”
“
a
a
a
b
b
b
”
”
a
a
b
b
b
b
”
.
“aaaabb” “aaabbb” ”aabbbb”.
“aaaabb”“aaabbb””aabbbb”.
‘
?
’
‘?’
‘?’表示的字符只能从已经给出的字符中选,所以
”
a
a
c
c
b
b
”
”aaccbb”
”aaccbb”是不合法的。
#include<bits/stdc++.h>usingnamespace std;constint mod =1e9+7;intmain(){int T; cin >> T;while(T--){
string s; cin >> s;
ll ans =1;int a =0, b = s.length()-1;while(s[a]=='?')++a;while(s[b]=='?')--b;for(int i = a; i <= b;++i){if(s[i]=='?'){int t = i;while(s[t]=='?')++t;if(s[i-1]!= s[t]) ans =(ans *((t - i +1)% mod))% mod;
i = t;}}
cout << ans << endl;}return0;}