#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double D;
typedef pair<ll,ll> P;
#define M 998244353
#define F first
#define S second
#define PB push_back
#define INF 100000000000000000
void NO(void){
	printf("0\n");
	exit(0);
}
int xr[1505];
bool vis[1505];
vector<int>g[1505];
int dfs(int v){
	vis[v]=true;
	int res=xr[v];
	for(int i=0;i<g[v].size();i++){
		int u=g[v][i];
		if(!vis[u]){
			res^=dfs(u);
		}
	}
	return res;
}
void check(int pn,int p[1505][1505],int po,ll &ans){
	if(pn%2==0){
		for(int i=0;i<po;i++)ans=ans*2LL%M;
		return;
	}
	for(int i=0;i<pn;i++){
		g[i].clear();
		vis[i]=false;
		xr[i]=0;
	}
	for(int i=0;i<pn;i++){
		for(int j=0;j<pn;j++){
			if(p[i][j]==-1){
				g[i].PB(j);
				g[j].PB(i);
			}
			if(p[i][j]==1){
				xr[i]^=1;
				xr[j]^=1;
			}
		}
	}
	ll s=0;
	for(int i=0;i<pn;i++){
		if(!vis[i]){
			int w=dfs(i);
			if(w==1)NO();
			s++;
		}
	}
	for(int i=0;i<po-pn+s;i++)ans=ans*2LL%M;
}
int n,m[1505][1505],p[1505][1505],q[1505][1505],pn,qn,po,qo;
ll ans=1LL;
int main(void){
	cin>>n;
	n--;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			char x;
			scanf(" %c",&x);
			if(x=='o')m[i][j]=1;
			else if(x=='x')m[i][j]=0;
			else m[i][j]=-1;
		}
	}
	pn=(n+1)/2+1;
	qn=n/2+1;
	for(int i=0;i<pn;i++)for(int j=0;j<pn;j++)p[i][j]=-2;
	for(int i=0;i<qn;i++)for(int j=0;j<qn;j++)q[i][j]=-2;
	for(int i=0;i*2<n;i++){
		for(int j=0;j+i+1<pn;j++){
			int k=i*2+j;
			int x=-1;
			if(m[k][j]!=-1&&x!=-1&&x!=m[k][j])NO();
			else if(m[k][j]!=-1)x=m[k][j];
			if(m[j][k]!=-1&&x!=-1&&x!=m[j][k])NO();
			else if(m[j][k]!=-1)x=m[j][k];
			if(m[n-1-k][n-1-j]!=-1&&x!=-1&&x!=m[n-1-k][n-1-j])NO();
			else if(m[n-1-k][n-1-j]!=-1)x=m[n-1-k][n-1-j];
			if(m[n-1-j][n-1-k]!=-1&&x!=-1&&x!=m[n-1-j][n-1-k])NO();
			else if(m[n-1-j][n-1-k]!=-1)x=m[n-1-j][n-1-k];
			p[i][j+i+1]=x;
			if(x==-1)po++;
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j+i+1<qn;j++){
			int k=i*2+1+j;
			int x=-1;
			if(m[k][j]!=-1&&x!=-1&&x!=m[k][j])NO();
			else if(m[k][j]!=-1)x=m[k][j];
			if(m[j][k]!=-1&&x!=-1&&x!=m[j][k])NO();
			else if(m[j][k]!=-1)x=m[j][k];
			if(m[n-1-k][n-1-j]!=-1&&x!=-1&&x!=m[n-1-k][n-1-j])NO();
			else if(m[n-1-k][n-1-j]!=-1)x=m[n-1-k][n-1-j];
			if(m[n-1-j][n-1-k]!=-1&&x!=-1&&x!=m[n-1-j][n-1-k])NO();
			else if(m[n-1-j][n-1-k]!=-1)x=m[n-1-j][n-1-k];
			q[i][j+i+1]=x;
			if(x==-1)qo++;
		}
	}
	check(pn,p,po,ans);
	check(qn,q,qo,ans);
	printf("%lld\n",ans);
}
