//NiceDuck
#include "bits/stdc++.h"
typedef long long ll;
using namespace std;
#define FILE "000"
#define foru(i,a,b) for(int i=(int)(a); i<=(int)(b); ++i)
#define ford(i,a,b) for(int i=(int)(a); i>=(int)(b); --i)
#define fastio ios_base::sync_with_stdio(0);cin.tie(0);
#define pb push_back
#define fi first
#define se second
#define el "\n"
#define MASK(i) (1LL<<(i))
#define BIT(i,j) (((i)>>(j))&1)
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define LOG 20
const ll MAX=1e4+4;
int n,l;
string str;
const ll BASE=311, MOD1=1e9+7, MOD2=1561023067;
ll h1[MAX],h2[MAX],p1[MAX],p2[MAX];
void buildHash()
{
p1[0]=p2[0]=1;
foru(i,1,l)
{
p1[i]=(p1[i-1]*BASE)%MOD1;
p2[i]=(p2[i-1]*BASE)%MOD2;
h1[i]=(h1[i-1]*BASE + (int)(str[i]))%MOD1;
h2[i]=(h2[i-1]*BASE + (int)(str[i]))%MOD2;
}
}
pair<ll,ll> getHash(int L, int R)
{
ll x=(h1[R]-h1[L-1]*p1[R-L+1]+MOD1*MOD1)%MOD1;
ll y=(h2[R]-h2[L-1]*p2[R-L+1]+MOD2*MOD2)%MOD2;
return make_pair(x,y);
}
map<pair<ll,ll>,ll> mp;
ll pw(ll x, ll y)
{
ll res=1;
while(y>0)
{
if(y&1) res=(res*x)%MOD1;
x=(x*x)%MOD1;
y>>=1;
}
return res;
}
int main()
{
fastio
if(fopen(FILE ".inp","r"))
{
freopen(FILE ".inp","r",stdin); freopen(FILE ".out","w",stdout);
}
cin>>str; cin>>n;
l=str.size();
str=" "+str;
buildHash();
foru(i,1,l)
{
ford(j,i,1)
{
pair<ll,ll> tmp=getHash(j,i);
mp[tmp]++;
}
}
ll ans=0;
for(pair<pair<ll,ll>,ll> pa:mp)
{
ll x=pa.se;
ans=(ans+pw(x,n))%MOD1;
}
cout<<ans;
return 0;
}
Ly9OaWNlRHVjawojaW5jbHVkZSAiYml0cy9zdGRjKysuaCIKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgRklMRSAiMDAwIgojZGVmaW5lIGZvcnUoaSxhLGIpIGZvcihpbnQgaT0oaW50KShhKTsgaTw9KGludCkoYik7ICsraSkKI2RlZmluZSBmb3JkKGksYSxiKSBmb3IoaW50IGk9KGludCkoYSk7IGk+PShpbnQpKGIpOyAtLWkpCiNkZWZpbmUgZmFzdGlvIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTsKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBNQVNLKGkpICgxTEw8PChpKSkKI2RlZmluZSBCSVQoaSxqKSAoKChpKT4+KGopKSYxKQojZGVmaW5lIFRJTUUgMS4wKmNsb2NrKCkvQ0xPQ0tTX1BFUl9TRUMKI2RlZmluZSBMT0cgMjAKCmNvbnN0IGxsIE1BWD0xZTQrNDsKaW50IG4sbDsKc3RyaW5nIHN0cjsKCmNvbnN0IGxsIEJBU0U9MzExLCBNT0QxPTFlOSs3LCBNT0QyPTE1NjEwMjMwNjc7CmxsIGgxW01BWF0saDJbTUFYXSxwMVtNQVhdLHAyW01BWF07CnZvaWQgYnVpbGRIYXNoKCkKewogICAgcDFbMF09cDJbMF09MTsKICAgIGZvcnUoaSwxLGwpCiAgICB7CiAgICAgICAgcDFbaV09KHAxW2ktMV0qQkFTRSklTU9EMTsKICAgICAgICBwMltpXT0ocDJbaS0xXSpCQVNFKSVNT0QyOwogICAgICAgIGgxW2ldPShoMVtpLTFdKkJBU0UgKyAoaW50KShzdHJbaV0pKSVNT0QxOwogICAgICAgIGgyW2ldPShoMltpLTFdKkJBU0UgKyAoaW50KShzdHJbaV0pKSVNT0QyOwogICAgfQp9CnBhaXI8bGwsbGw+IGdldEhhc2goaW50IEwsIGludCBSKQp7CiAgICBsbCB4PShoMVtSXS1oMVtMLTFdKnAxW1ItTCsxXStNT0QxKk1PRDEpJU1PRDE7CiAgICBsbCB5PShoMltSXS1oMltMLTFdKnAyW1ItTCsxXStNT0QyKk1PRDIpJU1PRDI7CiAgICByZXR1cm4gbWFrZV9wYWlyKHgseSk7Cn0KbWFwPHBhaXI8bGwsbGw+LGxsPiBtcDsKCmxsIHB3KGxsIHgsIGxsIHkpCnsKICAgIGxsIHJlcz0xOwogICAgd2hpbGUoeT4wKQogICAgewogICAgICAgIGlmKHkmMSkgcmVzPShyZXMqeCklTU9EMTsKICAgICAgICB4PSh4KngpJU1PRDE7CiAgICAgICAgeT4+PTE7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpCnsKICAgIGZhc3RpbwogICAgaWYoZm9wZW4oRklMRSAiLmlucCIsInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKEZJTEUgIi5pbnAiLCJyIixzdGRpbik7IGZyZW9wZW4oRklMRSAiLm91dCIsInciLHN0ZG91dCk7CiAgICB9CiAgICBjaW4+PnN0cjsgY2luPj5uOwogICAgbD1zdHIuc2l6ZSgpOwogICAgc3RyPSIgIitzdHI7CiAgICBidWlsZEhhc2goKTsKICAgIGZvcnUoaSwxLGwpCiAgICB7CiAgICAgICAgZm9yZChqLGksMSkKICAgICAgICB7CiAgICAgICAgICAgIHBhaXI8bGwsbGw+IHRtcD1nZXRIYXNoKGosaSk7CiAgICAgICAgICAgIG1wW3RtcF0rKzsKICAgICAgICB9CiAgICB9CiAgICBsbCBhbnM9MDsKICAgIGZvcihwYWlyPHBhaXI8bGwsbGw+LGxsPiBwYTptcCkKICAgIHsKICAgICAgICBsbCB4PXBhLnNlOwogICAgICAgIGFucz0oYW5zK3B3KHgsbikpJU1PRDE7CiAgICB9CiAgICBjb3V0PDxhbnM7CgogICAgcmV0dXJuIDA7Cn0K