Wrong Answer even though the code is similar to the solution

my code

#include<bits/stdc++.h>
using namespace std;
#define ll     long long

ll MOD  = 1e9+7;

ll mathpow(ll a, ll n){
    if(n<0) return 0;
    ll res = 1;
    while(n){
        if(n%2){
            res*=a;
            n--;
        }else{
            a*=a;
            n/=2;
        }
    }
    return res;
}

void solve()
{
  int n;
  cin>>n;
  string s;
  cin>>s;

  vector<ll> pref(n),pref_4(n);

    pref[0] = (s[0]=='*');
    pref_4[0] = (s[0]=='4');

    for(int i=1; i<n; i++){
         pref[i] = pref[i-1]+ (s[i]=='*');
         pref_4[i] = pref_4[i-1]+ (s[i]=='4');
    }

    ll ans = 0;
    for(int i=1; i<n; i++){
        if(s[i]!='4'){
            ll left_4 = pref_4[i-1];
            ll right_4 = pref_4[n-1]-pref_4[i];

            ll left = pref[i-1];
            ll right = pref[n-1]-pref[i];

            ll lefts = ((mathpow(2,left)*left_4)%MOD+ (left*mathpow(2,left-1))%MOD)%MOD;
            ll rights = ((mathpow(2,right)*right_4)%MOD+(right*mathpow(2,right-1))%MOD)%MOD;

            ans += (lefts*rights)%MOD;
            
            ans%=MOD;
        }
    }
    cout<<ans<<endl;

}

int main()
{
    int t = 1;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}