// while (clock()<=69*CLOCKS_PER_SEC)
// #pragma comment(linker, "/stack:200000000")
// #pragma GCC optimize("O3")
// #pragma GCC optimize("Ofast")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
// #pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

#define pb push_back
#define SZ(x) ((int)(x).size())
#define ALL(x) x.begin(),x.end()
#define all(x) x.begin(),x.end()
#define fi first
#define se second
#define _upgrade ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define erase_duplicates(x) sort(all(x)); (x).resize(distance((x).begin(), unique(all(x))));


using namespace std;
using namespace __gnu_pbds;
template<typename T>
using ordered_set = tree<
T,
null_type,
less<T>,
rb_tree_tag,
tree_order_statistics_node_update>;

//X.find_by_order(k); - zwraca iterator na k-ty element (numeracja od zerowego)
//X.order_of_key(k); - zwraca liczbę elementów ostro mniejszych niż k

typedef long long LL;
typedef pair<int,int> PII;
typedef pair<LL,LL> PLL;
typedef vector<PII> VPII;
typedef vector<PLL> VPLL;
typedef vector<LL> VLL;
typedef vector<int> VI;
typedef vector<string> VS;
typedef vector<char> VC;
typedef long double LD;
typedef pair<LD,LD> PLD;
typedef vector<LD> VLD;
typedef vector<PLD> VPLD;

template<class TH> void _dbg(const char *sdbg, TH h){ cerr<<sdbg<<" = "<<h<<endl; }
template<class TH, class... TA> void _dbg(const char *sdbg, TH h, TA... a) {
  while(*sdbg!=',')cerr<<*sdbg++;
  cerr<<" = "<<h<<", "; _dbg(sdbg+1, a...);
}

#ifdef LOCAL
#define dbg(...) _dbg(#__VA_ARGS__, __VA_ARGS__)
#else
#define dbg(...)
#define cerr if(0)cout
#endif

const int maxn = (130)+7;
const int maxk = 20;
const int inf = (1e9)+7;
const LL LLinf = ((LL)1e18)+7LL;
const LD eps = 1e-9;
const LL mod = 1e9+7;

// ***************************** CODE ***************************** //

LL dp[maxn][maxn];
LL dp2[maxn][maxn];
LL res[maxn][maxn];

bool init = 0;

void jeb()
{
  if(!init)
  {
    init = 1;
    for(int i = 0;i < maxn;i++)
      for(int j = 0;j < maxn;j++)
        dp[i][j] = res[i][j];
  }
  else
  {
    for(int i = 0;i < maxn;i++)
      for(int j = 0;j < maxn;j++)
        dp2[i][j] = LLinf;
    for(int i = 'a';i <= 'z';i++)
      for(int j = 'a';j <= 'z';j++)
        for(int k = 'a';k <= 'z';k++)
          for(int l = 'a';l <= 'z';l++)
            if(j != k)
              dp2[i][l] = min(dp2[i][l], dp[i][j] + res[k][l]);
      for(int i = 0;i < maxn;i++)
        for(int j = 0;j < maxn;j++)
          dp[i][j] = dp2[i][j];
  }
}

void dalej()
{
    for(int i = 0;i < maxn;i++)
      for(int j = 0;j < maxn;j++)
        dp2[i][j] = LLinf;
    for(int i = 'a';i <= 'z';i++)
      for(int j = 'a';j <= 'z';j++)
        for(int k = 'a';k <= 'z';k++)
          for(int l = 'a';l <= 'z';l++)
            if(j != k)
              dp2[i][l] = min(dp2[i][l], res[i][j] + res[k][l]);
      for(int i = 0;i < maxn;i++)
        for(int j = 0;j < maxn;j++)
          res[i][j] = dp2[i][j];
}

int main()
{
	_upgrade
  string s;
  int k;
  cin>>s>>k;
  for(int i = 0;i < maxn;i++)
    for(int j = 0;j < maxn;j++)
      dp[i][j] = LLinf;
  for(int i = 'a';i <= 'z';i++)
    if(s[0] == i)
      dp[i][i] = 0;
    else
      dp[i][i] = 1;
  for(int j = 1;j < SZ(s);j++)
  {
    for(int i = 0;i < maxn;i++)
      for(int j = 0;j < maxn;j++)
        dp2[i][j] = inf;
    for(int l = 'a';l <= 'z';l++)
      for(int p = 'a';p <= 'z';p++)
        for(int pp = 'a';pp <= 'z';pp++)
          if(p != pp)
            dp2[l][pp] = min(dp2[l][pp], dp[l][p] + (pp != s[j]));
    for(int i = 0;i < maxn;i++)
      for(int j = 0;j < maxn;j++)
        dp[i][j] = dp2[i][j];
  }
  for(int i = 0;i < maxn;i++)
    for(int j = 0;j < maxn;j++)
      res[i][j] = dp[i][j];
  for(int i = 0;i < 50;i++)
  {
    if((1LL<<i) & k)
      jeb();
    dalej();
  }
  LL wyn = 100LL * k;
  for(int i = 0 ;i < maxn;i++)
    for(int j = 0;j < maxn;j++)
      wyn = min(wyn, dp[i][j]);
  cout<<wyn;
	return 0;
}


Measured memory_bytes: 640