#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define pii pair<int,int>
#define fi first
#define se second
#define mp make_pair
#define poly vector<ll>
#define For(i,l,r) for(int i=(int)(l);i<=(int)(r);i++)
#define Rep(i,r,l) for(int i=(int)(r);i>=(int)(l);i--)
#define pb push_back
inline ll read(){
	ll x=0; char ch=getchar(); bool d=1;
	for(;!isdigit(ch);ch=getchar()) if(ch=='-') d=0;
	for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
	return d?x:-x;
}
inline ull rnd(){
	return ((ull)rand()<<30^rand())<<4|rand()%4;
}
const int N=2e5+5;
int sum[N][26];
char s[N];
int main(){
	scanf("%s",s+1);
	int n=strlen(s+1),la=n+1;
	ll ans=0;
	Rep(i,n,1){
		For(j,0,25) sum[i][j]=sum[i+1][j];
		sum[i][s[i]-'a']++;
		if(i>n-2) continue;
		if(s[i]==s[i+1]){
			int ssw=la-i-sum[i][s[i]-'a']+sum[la][s[i]-'a'];
			if(s[la]!=s[i]) ssw+=n-la+1;
			la=i; ans+=ssw;
		}
	}
	cout<<ans;
}
#include <bits/stdc++.h>
using namespace std;

//UnionFindテンプレ
class UnionFind {
    // まとめる 判定 サイズを知る
    public:
    // Aから見た親の番号を格納する。rootだったら-1*その集合のサイズ。
    vector<int> Parent;

    // 初期化
    UnionFind(int N) {
        Parent = vector<int>(N, -1);
    }

    // Aのrootを調べる
    int root(int A) {
        if (Parent[A] < 0) return A;  // マイナスならそれはroot
        return Parent[A] = root(Parent[A]);
    }

    // rootの値をプラスに戻して返す(サイズ)
    int size(int A) {
        return -Parent[root(A)];
    }

    // くっつける関数
    bool connect(int A, int B) {
        // AとBのroot同士をくっつける
        A = root(A);  // ここのAは、"rootの場所"の意味
        B = root(B);
        if (A == B) return false;  // 既にくっついている
        if (size(A) < size(B))
        swap(A, B);            // 大きい方にくっつけるために中身交換
        Parent[A] += Parent[B];  // 中身更新
        Parent[B] = A;
        return true;
    }

    //連結か調べる関数
    bool issame(int A, int B) {
        return root(A) == root(B);
    }
};

//chmin,chmax関数(DP用)
template<class T> inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}

//aのZ/mZでの逆元
int64_t modinv(int64_t a, int64_t m) {
    int64_t b = m, u = 1, v = 0;
    while (b) {
        int64_t t = a / b;
        a -= t * b; swap(a, b);
        u -= t * v; swap(u, v);
    }
    u %= m;
    if (u < 0) u += m;
    return u;
}

//累乗a^b
int64_t pow(int a, int b) {
    int64_t ans = (int64_t)1;
    for (int i = 0; i < b; i++) {
        ans *= (int64_t)a;
    }
    return ans;
}

//最大公約数
int gcd(int a, int b) {
    if (a % b == 0) {
        return b;
    }
    return gcd(b, a%b);
}

char jan(char x, char y) {
    if (x == y) {
        return x;
    }
    if (x == 'R') {
        if (y == 'S') {
            return 'R';
        } else {
            return 'P';
        }
    }
    if (x == 'S') {
        if (y == 'R') {
            return 'R';
        } else {
            return 'S';
        }
    }
    if (x == 'P') {
        if (y == 'R') {
            return 'P';
        } else {
            return 'S';
        }
    }
    return x;
}

//ここから

int main() {
    int n,k;
    cin >> n >> k;
    string s;
    cin >> s;

    s += s;
    int a = s.size();
    
    for (int i = 0; i < k; i++) {
        string S;
        for (int j = 0; j < a/2; j++) {
            S += jan(s.at(2*j), s.at(2*j+1));
        }
        s = S+S;
    }

    cout << s.at(0) << endl;
}

