1 #include <iostream>
2 #include <string>
3 #define LL long long
4 #define MAXN 100
5 using namespace std;
6
7 int dis[2][2] = {1,0,0,1};
8
9 int _m[MAXN][MAXN];
10 LL dp[MAXN][MAXN];
11 struct node
12 {
13 int x;
14 int y;
15 };
16 int n;
17 LL dfs(node _node);
18 //bool mark[MAXN][MAXN];
19 int main()
20 {
21 //freopen("acm.acm","r",stdin);
22
23 int i;
24 int j;
25 string s;
26 while(cin>>n)
27 {
28 getchar();
29 if(n == -1)
30 {
31 break;
32 }
33 memset(dp,0,sizeof(dp));
34 for(i = 0; i < n; ++ i)
35 {
36 getline(cin,s);
37 for(j = 0; j < n; ++ j)
38 {
39 //cin>>_m[i][j];
40 _m[i][j] = s[j]-'0';
41 }
42 }
43
44 node b;
45 b.x = 0;
46 b.y = 0;
47 cout<<dfs(b)<<endl;
48 }
49 }
50
51
52 LL dfs(node _node)
53 {
54 if(_node.x == n-1 && _node.y == n-1)
55 {
56 return 1;
57 }
58 if(_m[_node.x][_node.y] == 0)
59 {
60 return 0;
61 }
62 node temp;
63 temp.x = _node.x+_m[_node.x][_node.y];
64 temp.y = _node.y;
65 if(temp.x < n)
66 {
67 if(dp[temp.x][temp.y] == 0)
68 {
69 dp[_node.x][_node.y] += dfs(temp);
70 }
71 else
72 {
73 dp[_node.x][_node.y] += dp[temp.x][temp.y];
74 }
75 }
76 temp.x = _node.x;
77 temp.y = _node.y+_m[_node.x][_node.y];
78 if(temp.y < n)
79 {
80 if(dp[temp.x][temp.y] == 0)
81 {
82 dp[_node.x][_node.y] += dfs(temp);
83 }
84 else
85 {
86 dp[_node.x][_node.y] += dp[temp.x][temp.y];
87 }
88 }
89
90 return dp[_node.x][_node.y];
91 }