#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1505,mod=998244353;
int n,cnt,num,e[2],st[N],tot,a[N][N],c[N][N],head[N],nex[N*N<<1],to[N*N<<1];
void add(int u,int v){to[++tot]=v;nex[tot]=head[u];head[u]=tot;}
char s[N][N];
vector<int>v[N][N];
bool vis[N];
void dfs(int u)
{
    vis[u]=true;
    cnt++;num^=st[u];
    for(int i=head[u];i;i=nex[i])
        if(!vis[to[i]])
            dfs(to[i]);
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<n;i++) scanf("%s",s[i]+1);
    for(int i=0;i<=n;i++)
    {
        int x=i,y=0,dx=1,dy=1;
        for(int j=1;j<=(i==0||i==n?n:2*n);j++)
        {
            v[x][y].push_back(i);
            if(x+dx<0||x+dx>n) dx*=-1;
            if(y+dy<0||y+dy>n) dy*=-1;
            x+=dx;y+=dy;
        }
    }
    for(int i=1;i<n;i++)
        for(int j=1;j<n;j++)
        if(s[i][j]=='o') a[i][j]=1;
        else if(s[i][j]=='x') a[i][j]=2;
    for(int i=1;i<n;i++)
        for(int j=1;j<n;j++)
    {
        int x=v[i][j][0],y=v[i][j][1];
        c[x][y]|=a[i][j];
        if(c[x][y]==3){printf("0\n");return 0;}
    }
    for(int i=0;i<=n;i++)
        for(int j=i+2;j<=n;j+=2)
        if(!c[i][j]) add(i,j),add(j,i),e[i&1]++;
        else st[i]^=c[i][j]-1,st[j]^=c[i][j]-1;
    ll ans=1;
    for(int opt=0;opt<=1;opt++)
    {
        int sum=(n-opt)/2+1;
        if(sum&1)
        {
            cnt=0;
            for(int i=opt;i<=n;i+=2)
                if(!vis[i])
                {
                    cnt--;num=0;
                    dfs(i);
                    if(num&1){printf("0\n");return 0;}
                }
            for(int j=1;j<=e[opt]-cnt;j++)
                ans=(ans<<1)%mod;
        }
        else for(int i=1;i<=e[opt];i++)
            ans=(ans<<1)%mod;
    }
    printf("%lld\n",ans);
}
