/* package whatever; // don't place package name! */
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
private static final List
<Character
> COLORS
= Arrays.
asList('R',
'G',
'B'); {
Scanner sc
= new Scanner
(System.
in); int n = sc.nextInt();
sc.nextLine();
}
dp[0][COLORS.indexOf(s.charAt(0))] = 0;
int minMovesToDiversify = findMinMovesToDiversifyGarland(n, s, 1, s.charAt(0), dp);
System.
out.
println(minMovesToDiversify
);
// for (Integer[] row : dp) {
// System.out.println("row is " + Arrays.toString(row));
// }
}
private static int findMinMovesToDiversifyGarland
(int n,
String s,
int currentPos,
char prevChar,
Integer[][] dp
) { if (currentPos == n) {
return 0;
}
if (s.charAt(currentPos) == prevChar) {
for (int i = 0; i < COLORS.size(); i++) {
if (COLORS.get(i) != s.charAt(currentPos)) {
minValue
= Math.
min(minValue, dp
[currentPos
][COLORS.
indexOf(COLORS.
get(i
))] = 1 + findMinMovesToDiversifyGarland
(n, s, currentPos
+ 1, COLORS.
get(i
), dp
)); }
}
// dp[currentPos][COLORS.indexOf(s.charAt(currentPos))] =
return minValue;
} else {
return dp[currentPos][COLORS.indexOf(s.charAt(currentPos))] = findMinMovesToDiversifyGarland(n, s, currentPos + 1, s.charAt(currentPos), dp);
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7Cglwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0PENoYXJhY3Rlcj4gQ09MT1JTID0gQXJyYXlzLmFzTGlzdCgnUicsICdHJywgJ0InKTsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCSBTY2FubmVyIHNjID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKICAgICAgICBpbnQgbiA9IHNjLm5leHRJbnQoKTsKICAgICAgICBzYy5uZXh0TGluZSgpOwogICAgICAgIFN0cmluZyBzID0gc2MubmV4dExpbmUoKTsKCiAgICAgICAgSW50ZWdlcltdW10gZHAgPSBuZXcgSW50ZWdlcltuXVszXTsKICAgICAgICBmb3IgKEludGVnZXJbXSByb3cgOiBkcCkgewogICAgICAgICAgICBBcnJheXMuZmlsbChyb3csIC0xKTsKICAgICAgICB9CgogICAgICAgIGRwWzBdW0NPTE9SUy5pbmRleE9mKHMuY2hhckF0KDApKV0gPSAwOwoKICAgICAgICBpbnQgbWluTW92ZXNUb0RpdmVyc2lmeSA9IGZpbmRNaW5Nb3Zlc1RvRGl2ZXJzaWZ5R2FybGFuZChuLCBzLCAxLCBzLmNoYXJBdCgwKSwgZHApOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtaW5Nb3Zlc1RvRGl2ZXJzaWZ5KTsKCi8vICAgICAgICBmb3IgKEludGVnZXJbXSByb3cgOiBkcCkgewovLyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicm93IGlzICIgKyBBcnJheXMudG9TdHJpbmcocm93KSk7Ci8vICAgICAgICB9Cgl9CgkKCXByaXZhdGUgc3RhdGljIGludCBmaW5kTWluTW92ZXNUb0RpdmVyc2lmeUdhcmxhbmQoaW50IG4sIFN0cmluZyBzLCBpbnQgY3VycmVudFBvcywgY2hhciBwcmV2Q2hhciwgSW50ZWdlcltdW10gZHApIHsKICAgICAgICBpZiAoY3VycmVudFBvcyA9PSBuKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKHMuY2hhckF0KGN1cnJlbnRQb3MpID09IHByZXZDaGFyKSB7CiAgICAgICAgICAgIGludCBtaW5WYWx1ZSA9IEludGVnZXIuTUFYX1ZBTFVFOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IENPTE9SUy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKENPTE9SUy5nZXQoaSkgIT0gcy5jaGFyQXQoY3VycmVudFBvcykpIHsKICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IE1hdGgubWluKG1pblZhbHVlLCBkcFtjdXJyZW50UG9zXVtDT0xPUlMuaW5kZXhPZihDT0xPUlMuZ2V0KGkpKV0gPSAxICsgZmluZE1pbk1vdmVzVG9EaXZlcnNpZnlHYXJsYW5kKG4sIHMsIGN1cnJlbnRQb3MgKyAxLCBDT0xPUlMuZ2V0KGkpLCBkcCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ci8vICAgICAgICAgICAgIGRwW2N1cnJlbnRQb3NdW0NPTE9SUy5pbmRleE9mKHMuY2hhckF0KGN1cnJlbnRQb3MpKV0gPQogICAgICAgICAgICByZXR1cm4gbWluVmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGRwW2N1cnJlbnRQb3NdW0NPTE9SUy5pbmRleE9mKHMuY2hhckF0KGN1cnJlbnRQb3MpKV0gPSBmaW5kTWluTW92ZXNUb0RpdmVyc2lmeUdhcmxhbmQobiwgcywgY3VycmVudFBvcyArIDEsIHMuY2hhckF0KGN1cnJlbnRQb3MpLCBkcCk7CiAgICAgICAgfQogICAgfQp9