#include <bits/stdc++.h>
#define C make_pair
#define ll long long
#define all(a) a.begin(),a.end()
#define name "task"
#define ln "\n"
using namespace std;
ll n;
const ll oo=1e14,mod=1e9+7;
vector<ll> fibo;
map<ll,ll> mp;
void sieve_fibo(){
ll f1=0,f2=1;
ll f3=0; //++mp[1LL];
while(f3<oo){
f3=f1+f2;
f1=f2; f2=f3;
//++mp[f3];
fibo.push_back(f3);
//cout<<f3<<ln;
}
}
void add(ll &a,ll b){
a+=b;
if(a>=mod)
a-=mod;
}
void solve(){
cin>>n;
sieve_fibo();
vector<ll> a(n+9),pre(n+9,0);
for(int i=1;i<=n;++i){
cin>>a[i];
pre[i]=pre[i-1]+a[i];
}
vector<ll> dp(n+9,0);
dp[0]=1;
for(int i=1;i<=n;++i){
for(ll f:fibo){
ll l=1,r=i,pos=-1;
while(l<=r){
ll mid=l+r>>1;
if(pre[i]-pre[mid-1]>=f){
pos=mid;
l=mid+1;
} else{
r=mid-1;
}
}
if(pos==-1){
break;
} else if(pre[i]-pre[pos-1]==f){
add(dp[i],dp[pos-1]);
}
}
}
cout<<dp[n];
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if(fopen(name".inp","r")){
freopen(name".inp","r",stdin);
freopen(name".out","w",stdout);
}
solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgQyBtYWtlX3BhaXIKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBhbGwoYSkgYS5iZWdpbigpLGEuZW5kKCkKI2RlZmluZSBuYW1lICJ0YXNrIgojZGVmaW5lIGxuICJcbiIKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKbGwgbjsKY29uc3QgbGwgb289MWUxNCxtb2Q9MWU5Kzc7CnZlY3RvcjxsbD4gZmlibzsKbWFwPGxsLGxsPiBtcDsKdm9pZCBzaWV2ZV9maWJvKCl7CglsbCBmMT0wLGYyPTE7CglsbCBmMz0wOyAvLysrbXBbMUxMXTsKCXdoaWxlKGYzPG9vKXsKCQlmMz1mMStmMjsKCQlmMT1mMjsgZjI9ZjM7CgkJLy8rK21wW2YzXTsKCQlmaWJvLnB1c2hfYmFjayhmMyk7CgkJLy9jb3V0PDxmMzw8bG47Cgl9Cn0Kdm9pZCBhZGQobGwgJmEsbGwgYil7CglhKz1iOwoJaWYoYT49bW9kKQoJCWEtPW1vZDsKfQp2b2lkIHNvbHZlKCl7CgljaW4+Pm47CglzaWV2ZV9maWJvKCk7Cgl2ZWN0b3I8bGw+IGEobis5KSxwcmUobis5LDApOwoJZm9yKGludCBpPTE7aTw9bjsrK2kpewoJCWNpbj4+YVtpXTsKCQlwcmVbaV09cHJlW2ktMV0rYVtpXTsKCX0KCXZlY3RvcjxsbD4gZHAobis5LDApOwoJZHBbMF09MTsKCWZvcihpbnQgaT0xO2k8PW47KytpKXsKCQlmb3IobGwgZjpmaWJvKXsKCQkJbGwgbD0xLHI9aSxwb3M9LTE7CgkJCXdoaWxlKGw8PXIpewoJCQkJbGwgbWlkPWwrcj4+MTsKCQkJCWlmKHByZVtpXS1wcmVbbWlkLTFdPj1mKXsKCQkJCQlwb3M9bWlkOwoJCQkJCWw9bWlkKzE7CgkJCQl9IGVsc2V7CgkJCQkJcj1taWQtMTsKCQkJCX0KCQkJfQoJCQlpZihwb3M9PS0xKXsKCQkJCWJyZWFrOwoJCQl9IGVsc2UgaWYocHJlW2ldLXByZVtwb3MtMV09PWYpewoJCQkJYWRkKGRwW2ldLGRwW3Bvcy0xXSk7CgkJCX0KCQl9Cgl9Cgljb3V0PDxkcFtuXTsKfQppbnQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZihmb3BlbihuYW1lIi5pbnAiLCJyIikpewogICAgICAgIGZyZW9wZW4obmFtZSIuaW5wIiwiciIsc3RkaW4pOwogICAgICAgIGZyZW9wZW4obmFtZSIub3V0IiwidyIsc3Rkb3V0KTsKICAgIH0KICAgIHNvbHZlKCk7Cn0K