Consider a circle whose perimeter is divided by N points into N arcs of equal length, and each of the arcs is painted red or blue. Such a circle is said to generate a string S from every point when the following condition is satisfied:

* We will arbitrarily choose one of the N points on the perimeter and place a piece on it.
* Then, we will perform the following move M times: move the piece clockwise or counter-clockwise to an adjacent point.
* Here, whatever point we choose initially, it is always possible to move the piece so that the color of the i-th arc the piece goes along is S_i, by properly deciding the directions of the moves.



Assume that, if S_i is `R`, it represents red; if S_i is `B`, it represents blue. Note that the directions of the moves can be decided separately for each choice of the initial point.

You are given a string S of length M consisting of `R` and `B`. Out of the 2^N ways to paint each of the arcs red or blue in a circle whose perimeter is divided into N arcs of equal length, find the number of ways resulting in a circle that generates S from every point, modulo 10^9+7.

Note that the rotations of the same coloring are also distinguished.

Constraints

* 2 \leq N \leq 2 \times 10^5
* 1 \leq M \leq 2 \times 10^5
* |S|=M
* S_i is `R` or `B`.

Input

Input is given from Standard Input in the following format:


N M
S


Output

Print the number of ways to paint each of the arcs that satisfy the condition, modulo 10^9+7.

Examples

Input

4 7
RBRRBRR


Output

2


Input

3 3
BBB


Output

4


Input

12 10
RRRRBRRRRB


Output

78
#include<stdio.h>
char s[262144];
int dp[262144];
int pre[262144];
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	scanf("%s",s);
	bool fir=true;
	int num=0;
	int mx=n;
	for(int i=0;i<m;i++)
	{
		if(s[i]==s[0])
		{
			num++;
		}
		else
		{
			if(fir||(num&1))
			{
				if(num<mx)
				{
					mx=num;
				}
			}
			fir=false;
			num=0;
		}
	}
	if(fir)
	{
		for(int i=2;i<=n;i++)
		{
			dp[i]=i;
			dp[i]+=pre[i-2];
			if(dp[i]>=1000000007)
			{
				dp[i]-=1000000007;
			}
			pre[i]=pre[i-1]+dp[i];
			if(pre[i]>=1000000007)
			{
				pre[i]-=1000000007;
			}
		}
		int ans=dp[n]+1;
		if(ans>=1000000007)
		{
			ans-=1000000007;
		}
		printf("%d\n",ans);
		return 0;
	}
	if(n&1)
	{
		printf("0\n");
		return 0;
	}
	if(!(mx&1))
	{
		mx++;
	}
	mx++;
	n>>=1;
	mx>>=1;
	for(int i=1;i<=n;i++)
	{
		dp[i]=pre[i-1];
		if(i<=mx)
		{
			dp[i]+=(i<<1);
			if(dp[i]>=1000000007)
			{
				dp[i]-=1000000007;
			}
		}
		else
		{
			dp[i]-=pre[i-mx-1];
			if(dp[i]<0)
			{
				dp[i]+=1000000007;
			}
		}
		pre[i]=pre[i-1]+dp[i];
		if(pre[i]>=1000000007)
		{
			pre[i]-=1000000007;
		}
	}
	printf("%d\n",dp[n]);
	return 0;
}