#define _LIBCPP_DEBUG 0
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using Graph = vector<vector<ll>>;

template<class T> bool chmin(T &a, T b) {if(a>b){a=b;return 1;}return 0;}
template<class T> bool chmax(T &a, T b) {if(a<b){a=b;return 1;}return 0;}
#define rep(i,n) for(ll i=0;i<ll(n);i++)
#define YESNO(T) if(T){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}
#define yesno(T) if(T){cout<<"yes"<<endl;}else{cout<<"no"<<endl;}
#define YesNo(T) if(T){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}

const ll INF = 1LL << 60;
const ll MOD = 1e9 + 7;
const double pi = 3.14159265358979;
const ll ju = 10000000000;



int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout << fixed << setprecision(15);

    ll n;
    string s;
    cin >> n >> s;

    if (n == 1){
        if (s == "0"){
            cout << ju << endl;
            return 0;
        }
        else{
            cout << 2*ju << endl;
            return 0;
        }
    }
    if (n == 2){
        if (s == "11"){
            cout << ju << endl;
            return 0;
        }
        else if (s == "10"){
            cout << ju << endl;
            return 0;
        }
        else if (s == "01"){
            cout << ju - 1 << endl;
            return 0;
        }
        else{
            cout << 0 << endl;
            return 0;
        }
    }

    ll type = -1;

    if (s[0] == '1' && s[1] == '1' && s[2] == '0') type = 1;
    else if (s[0] == '1' && s[1] == '0' && s[2] == '1') type = 2;
    else if (s[0] == '0' && s[1] == '1' && s[2] == '1') type = 3;

    if (type == -1){
        cout << 0 << endl;
        return 0;
    }

    bool pos = true;

    for (ll i = 3; i < n; i++){
        if (s[i] != s[i-3]){
            pos = false;
            break;
        }
    }

    if (!pos){
        cout << 0 << endl;
        return 0;
    }

    if (type == 1){
        if (n %3 == 0){
            cout << ju + 1 - n/3  << endl;
            return 0;
        }
        else{
            cout << ju - n/3 << endl;
            return 0;
        }
    }
    else if (type == 2){
        cout << ju - n/3 << endl;
        return 0;
    }
    else{
        if (n %3 == 0 || n %3 == 1){
            cout << ju - n/3  << endl;
            return 0;
        }
        else{
            cout << ju - 1 - n/3 << endl;
            return 0;
        }
    }


}
#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    string S = "110", T;
    cin >> N >> T;
    long long  all= 10000000000;
    long long res = 0;
    if (T == "0") res = all;
    else if (T == "1") res =  all * 2;
    else{
        //110のどこから始まるかで全探索
        for (int i = 0; i < 3; ++i) {
            //消費した110の数。例えば、0110はi=2のときのみだが、(4+2+2)/3=2で2個消費。
            //i=0なら2足しても結果は変わらない。i=1以上なら3がひとつ増えるように2がたされる。
            //2を足すのは、3個あるうちの1個でも消費していたら、それを消費したものと見なすため。
            long long a = (T.size() + i + 2)/3;
            //含まれていた場合のその個数
            long long add = all - a + 1;

            //含まれていたらadd そうでなければaddしない
            bool contain = true;
            for(int j=0; j < T.size();j++){
                if(T[j]!=S[(i+j)%3])contain=false;
            }
            if(contain) res+=add;
        }
   }
   cout << res << endl;
}