This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define mod 1000000007
#define maxN 100005
using namespace std;
vector <int> v,u;
int n,a,i;
bool moze(int y){
    if(v[y]<=2) return false;
    if(y==0) return true;
    if(v[y-1]==v[y]-1) return false;
    if(v[y-1]!=v[y]-2) return true;
    return moze(y-1);
}
void ubaci1(int x){
    int i,y;
    y=lower_bound(v.begin(),v.end(),x)-v.begin();
    v.insert(v.begin()+y,x);
    for(i=v.size()-1;i>0;i--){
     if(i>=v.size()) continue;
      if(v[i]==v[i-1]){
          int tmp=v[i];
          v.erase(v.begin()+i);
          y=lower_bound(v.begin(),v.end(),tmp-1)-v.begin();
          v.insert(v.begin()+y,tmp-1);
          y=lower_bound(v.begin(),v.end(),max(tmp-2,1))-v.begin();
          v.insert(v.begin()+y,max(tmp-2,1));
          i+=2;
      }
    }
}
void ubaci(int x){
    int y=lower_bound(v.begin(),v.end(),x)-v.begin();
    if(moze(y)){
        ubaci1(x);
        return;
    }
    if(x>1){
    int i;
    if(v[y]!=x) {v.insert(v.begin()+y,x); return;}
    v.erase(v.begin()+y);
    ubaci(max(1,x-2));
    ubaci(x+1);}
    else{
        if(v.size() && v[0]==1) {v.erase(v.begin()); ubaci(2);}
        else v.insert(v.begin(),1);
    }
}
long long resi(){
    long long i,j,x,a,ans,tmp,pom,ans1;
    ans=1;
    ans1=0;
    a=0;
    for(i=0;i<v.size();i++){
        pom=ans;
        x=v[i]-a-1;
        x=(x/2+1);
        ans*=x;
        if(a%2==v[i]%2) ans+=ans1;
        ans%=mod;
        x=v[i]-a-3;
        if(x>=0){
            tmp=ans1;
            x=(x/2+1);
            ans1=pom*x;
            if(a%2==v[i]%2) ans1+=tmp;
            ans1%=mod;
        }
        if(v[i]==a+1) ans1=0;
        a=v[i];
        //cout<<ans<<" "<<ans1<<endl;
    }
    return (ans+mod)%mod;
}
int main() {
    cin>>n;
    for(i=0;i<n;i++){
        cin>>a;
        int y=lower_bound(v.begin(),v.end(),a)-v.begin();
        //cout<<y<<endl;
        if(y==v.size() || v[y]!=a) v.insert(v.begin()+y,a);
        else{
        if(moze(y)) ubaci1(a);
        else ubaci(a);
        }
        //for(int j=0;j<v.size();j++) cout<<v[j]<<" ";
        for(int k=v.size();k>=0;k--){
        for(int j=v.size()-1;j>0;j--){
            if(v[j]-1==v[j-1] && (j==v.size()-1 || v[j]!=v[j+1]-1)){
          v.insert(v.begin()+j+1,v[j]+1);
          v.erase(v.begin()+j-1);
          v.erase(v.begin()+j-1);
        }
        }
        }
        cout<<resi()<<endl;
    }
    return 0;
}
Compilation message (stderr)
fib.cpp: In function 'void ubaci1(int)':
fib.cpp:23:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
      if(i>=v.size()) continue;
         ~^~~~~~~~~~
fib.cpp: In function 'void ubaci(int)':
fib.cpp:43:9: warning: unused variable 'i' [-Wunused-variable]
     int i;
         ^
fib.cpp: In function 'long long int resi()':
fib.cpp:59:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i=0;i<v.size();i++){
             ~^~~~~~~~~
fib.cpp:55:17: warning: unused variable 'j' [-Wunused-variable]
     long long i,j,x,a,ans,tmp,pom,ans1;
                 ^
fib.cpp: In function 'int main()':
fib.cpp:87:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(y==v.size() || v[y]!=a) v.insert(v.begin()+y,a);
            ~^~~~~~~~~~
fib.cpp:95:36: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(v[j]-1==v[j-1] && (j==v.size()-1 || v[j]!=v[j+1]-1)){
                                   ~^~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |