package main
import (
"fmt"
)
func Valid(r rune) bool {
if r == 'T' || r == 'O' || r == 'I' {
return true
}
return false
}
func Min(a int, b int) int {
if a >= b {
return b
}
return a
}
func Compute(s string, dp [][]int, i int, j int) int {
if i == j {
if Valid(rune(s[i])) {
return 0
} else {
return 1
}
} else if i + 1 == j {
if Valid(rune(s[i])) {
if Valid(rune(s[j])) {
if s[i] == s[j] {
return 0
} else {
return 1
}
} else {
return 1
}
} else {
if Valid(rune(s[j])) {
return 1
} else {
return 2
}
}
}
if s[i] == s[j] {
if Valid(rune(s[i])) {
return dp[i + 1][j - 1]
}
return 2 + dp[i + 1][j - 1]
}
if Valid(rune(s[i])) {
if Valid(rune(s[j])) {
return 1 + Min(
dp[i + 1][j],
Min(
dp[i][j - 1],
dp[i + 1][j - 1],
),
)
} else {
return 1 + Min(
dp[i][j - 1],
dp[i + 1][j - 1],
)
}
} else {
if Valid(rune(s[j])) {
return 1 + Min(
dp[i + 1][j],
dp[i + 1][j - 1],
)
} else {
return Min(
1 + dp[i][j - 1],
1 + dp[i + 1][j],
)
}
}
}
func main() {
var n int
fmt.Scanf("%d", &n)
var s string
fmt.Scanf("%v", &s)
dp := make([][]int, n)
for i := 0; i < n; i++ {
dp[i] = make([]int, n)
}
for offset := 0; offset < n; offset++ {
for i := 0; i + offset < n; i++ {
j := i + offset
dp[i][j] = Compute(s, dp, i, j)
}
}
/*
for i := 0; i < n; i++ {
for j := 0; j < n; j++ {
fmt.Printf("%d ", dp[i][j])
}
fmt.Println()
}
*/
fmt.Println(dp[0][n - 1])
}