#include<stdio.h>
int trans[256];
int give[3] = { 2,0,1 };
char I[121212];
int S[3][121212], RS[3][121212];
int mx[121212], rmx[121212];
int max(int a, int b) { if (a < b)return b; return a; }
int main() {
trans['H'] = 0, trans['S'] = 1, trans['P'] = 2;
int n;
int i, j;
scanf("%d", &n);
for (i = 1; i <= n; i++) {
scanf(" %c", &I[i]);
S[0][i] = S[0][i - 1];
S[1][i] = S[1][i - 1];
S[2][i] = S[2][i - 1];
S[give[trans[I[i]]]][i]++;
mx[i] = max(max(S[0][i], S[1][i]), S[2][i]);
}
for (i = n; i >= 1; i--) {
RS[0][i] = RS[0][i + 1];
RS[1][i] = RS[1][i + 1];
RS[2][i] = RS[2][i + 1];
RS[give[trans[I[i]]]][i]++;
rmx[i] = max(max(RS[0][i], RS[1][i]), RS[2][i]);
}
int ans = 0;
for (i = 1; i <= n; i++) {
ans = max(ans, mx[i] + rmx[i + 1]);
}
printf("%d", ans);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KaW50IHRyYW5zWzI1Nl07CmludCBnaXZlWzNdID0geyAyLDAsMSB9OwpjaGFyIElbMTIxMjEyXTsKaW50IFNbM11bMTIxMjEyXSwgUlNbM11bMTIxMjEyXTsKaW50IG14WzEyMTIxMl0sIHJteFsxMjEyMTJdOwppbnQgbWF4KGludCBhLCBpbnQgYikgeyBpZiAoYSA8IGIpcmV0dXJuIGI7IHJldHVybiBhOyB9CmludCBtYWluKCkgewoJdHJhbnNbJ0gnXSA9IDAsIHRyYW5zWydTJ10gPSAxLCB0cmFuc1snUCddID0gMjsKCWludCBuOwoJaW50IGksIGo7CglzY2FuZigiJWQiLCAmbik7Cglmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgewoJCXNjYW5mKCIgJWMiLCAmSVtpXSk7CgkJU1swXVtpXSA9IFNbMF1baSAtIDFdOwoJCVNbMV1baV0gPSBTWzFdW2kgLSAxXTsKCQlTWzJdW2ldID0gU1syXVtpIC0gMV07CgkJU1tnaXZlW3RyYW5zW0lbaV1dXV1baV0rKzsKCQlteFtpXSA9IG1heChtYXgoU1swXVtpXSwgU1sxXVtpXSksIFNbMl1baV0pOwoJfQoJZm9yIChpID0gbjsgaSA+PSAxOyBpLS0pIHsKCQlSU1swXVtpXSA9IFJTWzBdW2kgKyAxXTsKCQlSU1sxXVtpXSA9IFJTWzFdW2kgKyAxXTsKCQlSU1syXVtpXSA9IFJTWzJdW2kgKyAxXTsKCQlSU1tnaXZlW3RyYW5zW0lbaV1dXV1baV0rKzsKCQlybXhbaV0gPSBtYXgobWF4KFJTWzBdW2ldLCBSU1sxXVtpXSksIFJTWzJdW2ldKTsKCX0KCWludCBhbnMgPSAwOwoJZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKCQlhbnMgPSBtYXgoYW5zLCBteFtpXSArIHJteFtpICsgMV0pOwoJfQoJcHJpbnRmKCIlZCIsIGFucyk7CglyZXR1cm4gMDsKfQ==