分析在一个字符串中,F改变对总价值的影响。当F在字符串的中间时,F的改变会对前后都造成+1,-1的影响,所以中间的F的改变会让总价值不变(前为-1,后为+1)或+2(前为+1,后为+1)或-2(前为-1,后为-1)。当F为最左一个数时或最右的一个数时,F对总价值造成的影响为+1或者-1。由数学知识可知,d=1,d=2的等差数列合并为d=1的等差数列。如下图所示。(具体参考Y总)
如果字符长度为n全部为F,价值为0~n-1,d=1。所以可能存在的价值为:最大价值-最小价值+d
n=int(input())
s=input()
l=0#左
r=n-1#右
low=0
hight=0
while s[l]=='F'and l<n-1:#左边F单独计算,直到读到B或E
l+=1
while s[r]=='F'and r>=0:#右边F单独计算
r-=1
s1=[]
s2=[]
for i in range(0,n):#对两个列表进行赋值
s1.append(s[i])
s2.append(s[i])
for i in range(l,r+1):#对l~r(包括r)的F进行改变,并得出最小的数量
if s1[i]=='F':
if s1[i-1]=='E':
s1[i]='B'
else:
s1[i]='E'
if s1[i-1]==s1[i] and i>0:
low+=1
for i in range(l,r+1):#对l~r(包括r)的F进行改变,并得出最大的数量
if s2[i]=='F':
if s2[i-1]=='E':
s2[i]='E'
else:
s2[i]='B'
if s2[i-1]==s2[i]and i>0:
hight+=1
end=l+n-r-1#左边F的数量与右边F的数量相加,如果等于0,说明左右两边没有F
d=2
if end:#判断左右是否存在F
hight+=end
d=1
if l>r:#如果字符串全部为F,则l>r
low=0
hight=n-1
d=1
print(int((hight-low)/d+1))#可能存在的价值
for i in range(low,hight+d,d):#打印每一种价值
print(i)