#include #include using namespace std; using ll=long long; using mint=atcoder::modint1000000007; struct S{ mint cnt; mint s,s2; S(ll cnt_=0,ll s_=0,ll s2_=0){ cnt=cnt_; s=s_; s2=s2_; } }; struct T{ vector vec; T(vector vec_=vector(4)){ vec=vec_; } }; S Smerge(S l,S r){ S ret; ret.cnt=l.cnt*r.cnt; ret.s=l.s*r.cnt+r.s*l.cnt; ret.s2=l.s2*r.cnt + r.s2*l.cnt + 2*l.s*r.s; return ret; } T merge(T l,T r){ T ret; for (auto t:{l,r}){ for (int i=0;i<4;i++){ auto m=t.vec[i]; ret.vec[i].cnt+=m.cnt; ret.vec[i].s+=m.s; ret.vec[i].s2+=m.s2; } } for (int i=0;i<4;i++) for (int j=0;j<4;j++){ if ((i&1)==(j&2)/2) continue; int k=(i&2)+(j&1); S m=Smerge(l.vec[i],r.vec[j]); ret.vec[k].cnt+=m.cnt; ret.vec[k].s+=m.s; ret.vec[k].s2+=m.s2; } return ret; } int main(){ string t; ll k; cin>>t>>k; int n=t.size(); T tt; for (int i=0;i0){ if (k%2==1) tt2=merge(tt2,tt); tt=merge(tt,tt); k/=2; } mint ans=0; for (int i=0;i<4;i++) ans+=tt2.vec[i].s2; cout<