#joi2016hob. [joi2016ho_b]スタンプラリー 2 (Collecting Stamps 2)

[joi2016ho_b]スタンプラリー 2 (Collecting Stamps 2)

题目翻译

JOI商店街沿着主干道有N家商店,每家商店从入口到出口都有编号1,2,...,N。JOI商店街是单行道,只能从入口向出口方向移动。

为了振兴城市,决定在JOI商店街举办集章活动。在这个活动中,每家商店准备了J、O、I三种类型的章,并且在顾客购物时可以在顾客的集章卡上盖章。参加集章活动的顾客需要进入恰好三家商店。在商店街的入口处发放一张集章卡,其中有三个空格,分别填入第一次进入的商店、第二次进入的商店和第三次进入的商店的章。在商店街的出口处收回集章卡,如果盖章的类型和顺序依次为J、O、I,则可以获得礼券奖励。如果盖章的类型和顺序不同,则无法获得礼券奖励。

已经确定了所有N家商店的章的类型,现在要决定新增加一家店时该店的位置以及该店准备的章的类型。新店可以选择位置为商店i和商店i+1之间(1≤i≤N-1),入口和商店1之间,以及商店N和出口之间的任意位置。此外,新店的章有三种选择:J、O、I。

商店街认为,选择能够获得礼券的店铺方式的数量越多,集章活动的热度就会越高。因此,希望计算出当确定新增加一家店的位置以及该店准备的章的类型时,能够获得礼券的店铺方式数量的最大值。

任务

给定JOI商店街已经准备的章的信息,请编写一个程序,计算在确定新增加一家店的位置和该店准备的章的类型时,能够获得礼券的店铺方式数量的最大值。

输入

从标准输入读取以下内容:

  • 第1行包含一个整数N,表示JOI商店街当前共有N家商店。
  • 第2行包含一个由N个大写英文字母J、O、I组成的字符串S。字符串S的第i个字符(1≤i≤N)表示第i家商店准备的章的类型。

输出

将能够获得礼券的店铺方式数量的最大值输出到标准输出中。

注意:获得礼券的店铺方式数量可能超出32位有符号整数的范围。

限制条件

所有输入数据满足以下条件:

  • 3≤N≤100,000。

示例

输入示例1

5
JOIOI

输出示例1

6

在示例1中,当在商店1和商店2之间开设一家新店,准备J类型的章时,商店的章按顺序排列是JJOIOI

此时,可以获得礼券的店铺方式有以下6种:

  • 去1号、3号、4号商店;
  • 去1号、3号、6号商店;
  • 去1号、5号、6号商店;
  • 去2号、3号、4号商店;
  • 去2号、3号、6号商店;
  • 去2号、5号、6号商店;

在示例1中,不能有7种或更多能够获得礼券的店铺方式。

输入示例2

7
JJJOIII

输出示例2

18

输入示例3

4
OIIJ

输出示例3

2

在示例3中,当在入口和商店1之间开设一家新店,准备J类型的章时,可以获得礼券的店铺方式的数量最大。