// // TLE版.
// // C++ (GCC 9.2.1)
// // 解き直し.
// // https://img.atcoder.jp/m-solutions2019/editorial.pdf
// #include <bits/stdc++.h>
// using namespace std;
// #define repex(i, a, b, c) for(int i = a; i < b; i += c)
// #define repx(i, a, b) repex(i, a, b, 1)
// #define rep(i, n) repx(i, 0, n)
// #define repr(i, a, b) for(int i = a; i >= b; i--)
// bool dpl[2020][2020], dpr[2020][2020];
// int A[2020][2020];
// 
// int main(){
//     
//     // 1. 入力情報.
//     int N, a;
//     scanf("%d", &N);
//     repx(i, 2, N + 1){
//         char c[2020];
//         scanf("%s", c);
//         int l = strlen(c);
//         repx(j, 1, l + 1){
//             A[i][j] = c[j - 1] - '0';
//             A[j][i] = 1 - A[i][j];
//         }
//     }
//     
//     // 2. 初期化.
//     rep(i, 2020) dpl[i][i] = true, dpr[i][i] = true;
//     
//     // 3. dp更新(解説通り).
//     // -> テストケース(073.txt) の N = 2000 だと, 4205[ms] かかったので, 高速化が必要.
//     repx(d, 1, N){
//         repx(i, 1, N){
//             // 2-1. (i, j) の ペア を 抽出.
//             int j = i + d;
//             if(j > N) break;
//             
//             // 2-2. dpl更新.
//             repx(k, i + 1, j + 1){
//                 if(A[i][k] && dpl[k][j] && dpr[k][i + 1]){
//                     dpl[i][j] = true;
//                     break;
//                 }
//             }
//             
//             // 2-3. dpr更新.
//             // ※ 解説上 の A[k][i] から, A[j][k] に 訂正.
//             repx(k, i, j){
//                 if(A[j][k] && dpl[k][j - 1] && dpr[k][i]){
//                     dpr[j][i] = true;
//                     break;
//                 }
//             }
//         }
//     }
//     // repx(i, 1, N + 1){
//     //     repx(j, 1, N + 1) printf("%d ", A[i][j]);
//     //     puts("");
//     // }
//     // repx(i, 1, N + 1){
//     //     repx(j, 1, N + 1) printf("%d ", dpl[i][j]);
//     //     puts("");
//     // }
//     // repx(i, 1, N + 1){
//     //     repx(j, 1, N + 1) printf("%d ", dpr[i][j]);
//     //     puts("");
//     // }
//     
//     // 4. 優勝する可能性がある人の人数は？
//     int ans = 0;
//     repx(i, 1, N + 1) if(dpl[i][N] && dpr[i][1]) ans++;
//     
//     // 5. 出力.
//     printf("%d\n", ans);
//     return 0;
//     
// }
// ※※※ 解答不能 ※※※
// I9992147氏.
// https://atcoder.jp/contests/m-solutions2019/submissions/9888159
#include <bits/stdc++.h>
using namespace std;
#define repex(i, a, b, c) for(int i = a; i < b; i += c)
#define repx(i, a, b) repex(i, a, b, 1)
#define rep(i, n) repx(i, 0, n)
#define repr(i, a, b) for(int i = a; i >= b; i--)

int main(){
    
    // 1. 入力情報.
    int N;
    scanf("%d", &N);
    vector<bitset<2020>> v(N);
    repx(i, 1, N){
        char c[2020];
        scanf("%s", c);
        rep(j, i){
            if(c[j] == '1') v[i][j] = 1;
            else            v[j][i] = 1;
        }
    }
    
    // 2. dp更新.
    vector<bitset<2020>> l(N), r(N);
    rep(i, N) l[i][i] = r[i][i] = 1;
    repx(i, 1, N){
        rep(j, N - i){
            l[i + j][j] = (l[i + j] & r[j + 1]     & v[j]).any();
            r[j][i + j] = (r[j]     & l[i + j - 1] & v[i + j]).any();
        }
    }
    
    // 3. 出力.
    printf("%d\n", (r[0] & l[N - 1]).count());
    return 0;
}

Measured memory_bytes: 4852