#include<bits/stdc++.h>
#define L long long
#define pb push_back
#define pi pair<int,int>
#define pii pair<pair<int,int>,int>
#define aa first
#define bb second
#define mp make_pair
#define mpp(a,b,c) mp(mp(a,b),c)
using namespace std;
const int q=1000000007;
int n,m,f[3010][3010],a[3010],b[3010],l[3010],r[3010];
char s[3010];
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int i,j,k;
	scanf("%d%d%s",&n,&m,&s[0]+1);
	for(i=1;i<=m;i++)
	  scanf("%d%d",&l[i],&r[i]);
	for(i=1,j=0,k=0;i<=n;i++)
	  {
	   a[i]=a[i-1];
	   b[i]=b[i-1];
	   for(;j<=m && i==l[j+1];j++)
	     for(;k+1<=r[j+1];k++)
	       if(s[k+1]=='0')
	         a[i]++;
	       else
	         b[i]++;
	   if(k<i)
	     {
		  k++;
		  if(s[i]=='0')
		    a[i]++;
		  else
		    b[i]++;
		 }
	  }
	f[0][0]=1;
	for(i=1;i<=n;i++)
	  {
	   f[i][0]=f[i-1][0];
	   for(j=1;j<=i;j++)
	     f[i][j]=(f[i-1][j-1]+f[i-1][j])%q;
	   for(j=a[i]+1;j<=i;j++)
	     f[i][j]=0;
	   for(j=0;j<i-b[i];j++)
	     f[i][j]=0;
	  }
	printf("%d\n",f[n][a[n]]);
	return 0;
}

### Prompt

Create a solution in CPP for the following problem:

There is a string S of length N consisting of characters `0` and `1`. You will perform the following operation for each i = 1, 2, ..., m:

* Arbitrarily permute the characters within the substring of S starting at the l_i-th character from the left and extending through the r_i-th character.



Here, the sequence l_i is non-decreasing.

How many values are possible for S after the M operations, modulo 1000000007(= 10^9+7)?

Constraints

* 2≦N≦3000
* 1≦M≦3000
* S consists of characters `0` and `1`.
* The length of S equals N.
* 1≦l_i < r_i≦N
* l_i ≦ l_{i+1}

Input

The input is given from Standard Input in the following format:


N M
S
l_1 r_1
:
l_M r_M


Output

Print the number of the possible values for S after the M operations, modulo 1000000007.

Examples

Input

5 2
01001
2 4
3 5


Output

6


Input

9 3
110111110
1 4
4 6
6 9


Output

26


Input

11 6
00101000110
2 4
2 3
4 7
5 6
6 10
10 11


Output

143

### Response

```cpp
#include<bits/stdc++.h>
#define L long long
#define pb push_back
#define pi pair<int,int>
#define pii pair<pair<int,int>,int>
#define aa first
#define bb second
#define mp make_pair
#define mpp(a,b,c) mp(mp(a,b),c)
using namespace std;
const int q=1000000007;
int n,m,f[3010][3010],a[3010],b[3010],l[3010],r[3010];
char s[3010];
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int i,j,k;
	scanf("%d%d%s",&n,&m,&s[0]+1);
	for(i=1;i<=m;i++)
	  scanf("%d%d",&l[i],&r[i]);
	for(i=1,j=0,k=0;i<=n;i++)
	  {
	   a[i]=a[i-1];
	   b[i]=b[i-1];
	   for(;j<=m && i==l[j+1];j++)
	     for(;k+1<=r[j+1];k++)
	       if(s[k+1]=='0')
	         a[i]++;
	       else
	         b[i]++;
	   if(k<i)
	     {
		  k++;
		  if(s[i]=='0')
		    a[i]++;
		  else
		    b[i]++;
		 }
	  }
	f[0][0]=1;
	for(i=1;i<=n;i++)
	  {
	   f[i][0]=f[i-1][0];
	   for(j=1;j<=i;j++)
	     f[i][j]=(f[i-1][j-1]+f[i-1][j])%q;
	   for(j=a[i]+1;j<=i;j++)
	     f[i][j]=0;
	   for(j=0;j<i-b[i];j++)
	     f[i][j]=0;
	  }
	printf("%d\n",f[n][a[n]]);
	return 0;
}

```