#include <bits/stdc++.h>
 
 
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
using namespace __gnu_pbds;
 
 
using namespace std;
 
#if !ONLINE_JUDGE
#define debug
#endif
 
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> ii;
typedef vector<pair<int,int> > vii;
typedef pair<ll,ll> pll;
typedef vector<vector<int> > vvi;
typedef vector<vector<ii> > vvii;
 
#define pb push_back
#define mp make_pair
#define all(x) x.begin(),x.end()
#define sz(x) (int)x.size()
#define fill(a,x) memset(a,x,sizeof(a))
#define ff first
#define ss second
#define trav(a, x) for(auto& a : x) 
#define FOR(i,a,b) for(int i = a; i<=b; ++i)
#define NFOR(i,a,b) for(int i = a; i>=b; --i)
const ll INF = 1e18;
const ll mod = 1e9 + 7;
 
ll gcd(ll a,ll b){if (a==0) return b;return gcd(b%a,a);}
ll lcm(ll a,ll b){return a*(b/gcd(a,b));}
ll Abs(ll a){if(a>0)return a;return -a;}
ll Ceil(ll a,ll b){if(a%b==0)return a/b;else return a/b+1;}
double Abs(double a){if(a>0)return a;return -a;}
 
//*X.find_by_order(2) element at index = 2
//X.order_of_key(1) how many elements strictly less than 1
 
#define ordered_set tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update> 
 
inline int pow_(ll x, ll y,ll p){
  int r = 1; while(y){if(y & 1) r = r * x % p; y >>= 1; x = x * x % p;} return r;
}
inline int inv_(int x){return pow_(x, mod - 2, mod);}
inline int add(ll a,ll b){a += b; if(a >= mod) a -= mod; return a;}
inline int mul(int a, int b){return a * 1LL * b % mod;}
inline int sub(int a, int b){a -= b; if(a < 0) a += mod; return a;}
 
#ifdef debug
#define dbg(...) { cerr<<"[ "; dump(#__VA_ARGS__, __VA_ARGS__);}
#undef endl
template <typename Arg1,typename Arg2>
ostream& operator << (ostream& out, const pair<Arg1,Arg2> &x) {
    return out<<"("<<x.ff<<","<<x.ss<<")";
}
 
template <typename Arg1>
ostream& operator << (ostream& out, const vector<Arg1> &a) {
    out<<"[";for(const auto &x:a)out<<x<<",";return out<<"]";
}
 
template <typename Arg1>
ostream& operator << (ostream& out, const set<Arg1> &a) {
    out<<"[";for(const auto &x:a)out<<x<<",";return out<<"]";
}
 
template <typename Arg1,typename Arg2>
ostream& operator << (ostream& out, const map<Arg1,Arg2> &a) {
    out<<"[";for(const auto &x:a)out<<x<<",";return out<<"]";
}
 
template <typename Arg1,typename Arg2>
ostream& operator << (ostream& out, const unordered_map<Arg1,Arg2> &a) {
    out<<"[";for(const auto &x:a)out<<x<<",";return out<<"]";
} 
 
template <typename Arg1>
void dump(const string name, Arg1&& arg1){
    cerr << name << " : " << arg1 << " ] " << endl;
}
 
template <typename Arg1, typename... Args>
void dump(const string names, Arg1&& arg1, Args&&... args){
    const string name = names.substr(0,names.find(','));
    cerr<<name<<" : "<<arg1<<" | ";
    dump(names.substr(1+(int)name.size()), args...);
}
#else
    #define dbg(args...)
#endif
 
mt19937_64 mrand(chrono::steady_clock::now().time_since_epoch().count());
 
const int N = 1e5;

int main(){
 
	#ifdef LOCAL_TEST
    freopen("in.txt","r",stdin);
    //freopen("out.txt", "w", stdout);
    #else
    ios_base::sync_with_stdio(false);cin.tie(NULL);
    #endif
    cout.precision(20);
    string s;
    cin>>s;
    ll k;
    cin>>k;
    ll ans = 0;
    if(s[0] != s[s.size()-1]){
	    for(int i=0;i<s.size();i++){
	    	int j=i;
	    	while(s[j] == s[i]){
	    		j++;
	    	}
	    	int count = j-i;
	    	ans += count/2;
	    	i = j-1;
	    }
	    ans = ans * k;
	    cout << ans << "\n";
	} else {
		string t;
		string t1;
		string t2;
		int i;
		for(i=0;i<s.size();i++){
			if(s[i] == s[0]){
				t1  += s[i];
			} else {
				break;
			}
		}

		int j;

		for(j=s.size()-1;j>=0;j--){
			if(s[j] == s[s.size()-1]){
				t2 += s[j];
			} else {
				break;
			}
		}

		reverse(all(t2));

		if(t1 == t2 && t1 == s){
			ll val = s.size();
			ll ans = (k *val)/2;
			cout << ans << "\n";
			return 0;
		}

		string t3 = t2 + t1;

		for(int k=i;k<=j;k++){
			t += s[k];
		}

		for(int i=0;i<t.size();i++){
			int j = i;
			while(t[j] == t[i]){
				j++;
			}
			ans += (j-i)/2;
			i = j-1;
		}
		ans = ans * k;
		ll ans2 = 0;
		for(int i=0;i<t3.size();i++){
			int j = i;
			while(t3[j] == t3[i]){
				j++;
			}
			ans2 += (j-i)/2;
			i = j-1;
		}

		ans2 *= k-1;
		ans += ans2;

		for(int i=0;i<t1.size();i++){
			int j = i;
			while(t1[j] == t1[i]){
				j++;
			}
			ans += (j-i)/2;
			i = j-1;
		} 

		for(int i=0;i<t2.size();i++){
			int j = i;
			while(t2[j] == t2[i]){
				j++;
			}
			ans += (j-i)/2;
			i = j-1;
		}

		//dbg(t1,t2,t3,t);
		cout << ans << "\n";

	}
   	return 0;
}


Measured memory_bytes: 256