CodeForces - 805D 思维

题目:当遇到ab时候变成bba,步数加一,最后输出步数

思路:所有的a到最后都是从左到右,而且a的数量不变

           之后ab后边有b就一直加一,变换后b的数量也会加一

            做法呢,就是从右边开始遍历,遇到a后就叫遇到的b乘以2

#include<bits/stdc++.h>
#define m 1000000007
char ch[1000002];
int main()
{
	
	while(scanf("%s",ch)!=EOF)
	{
		long long cnt=0,ans=0;
		int l=strlen(ch);
		for(int i=l-1;i>=0;i--)
		{
			if(ch[i]=='b')
			{
				cnt++;
			}
			else if(ch[i]=='a') 
			{
				ans=(ans+cnt)%m;
				cnt=(cnt*2)%m;
			}
		}
		printf("%lld\n",ans);
	}
}

We have a string of letters 'a' and 'b'. We want to perform some operations on it. On each step we choose one of substrings "ab" in the string and replace it with the string "bba". If we have no "ab" as a substring, our job is done. Print the minimum number of steps we should perform to make our job done modulo 109 + 7.

The string "ab" appears as a substring if there is a letter 'b' right after the letter 'a' somewhere in the string.

Input

The first line contains the initial string consisting of letters 'a' and 'b' only with length from 1 to 106.

Output

Print the minimum number of steps modulo 109 + 7.

Examples

Input

ab

Output

1

Input

aab

Output

3

Note

The first example: "ab"  →  "bba".

The second example: "aab"  →  "abba"  →  "bbaba"  →  "bbbbaa".

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章