#include<bits/stdc++.h>
using namespace std;
const int N=25;
int n;
char a[N][N];
int xx[4]={1,0,-1,0};
int yy[4]={0,1,0,-1};
struct node{
int x1,y1,x2,y2,k1,k2;
bool operator < (const node &p) const {
if(x1!=p.x1)return x1<p.x1;
if(y1!=p.y1)return y1<p.y1;
if(x2!=p.x2)return x2<p.x2;
if(y2!=p.y2)return y2<p.y2;
if(k1!=p.k1)return k1<p.k1;
if(k2!=p.k2)return k2<p.k2;
}
};
map<node,bool>v;
void Exband(node &x)
{
int nx=x.x1,ny=x.y1,k=x.k1;
int tx=nx+xx[k],ty=ny+yy[k];
if(!(nx==n&&ny==n)&&tx>=1&&tx<=n&&ty>=1&&ty<=n&&a[tx][ty]=='E')x.x1=tx,x.y1=ty;
nx=x.x2,ny=x.y2;k=x.k2;
tx=nx+xx[k];ty=ny+yy[k];
if(!(nx==n&&ny==n)&&tx>=1&&tx<=n&&ty>=1&&ty<=n&&a[tx][ty]=='E')x.x2=tx,x.y2=ty;
}
int main()
{
scanf("%d",&n);
for(int i=n;i>=1;i--)
for(int j=1;j<=n;j++)cin>>a[i][j];
queue<pair<node,int> >q;
q.push(make_pair((node){1,1,1,1,0,1},0));
while(q.size())
{
node x=q.front().first;
int dis=q.front().second;
q.pop();
/**/ if(v.find(x)!=v.end())continue;
/**/ v[x]=true;
if(x.x1==n&&x.y1==n&&x.y2==n&&x.x2==n){
printf("%d",dis);
return 0;
}
node y=x;Exband(y);if(v.find(y)==v.end())q.push(make_pair(y,dis+1));
y=x;y.k1=(x.k1+3)%4,y.k2=(x.k2+3)%4;
/**/ if(v.find(y)==v.end())q.push(make_pair(y,dis+1));
y=x;y.k1=(x.k1+1)%4,y.k2=(x.k2+1)%4;
/**/ if(v.find(y)==v.end())q.push(make_pair(y,dis+1));
}
return 0;
}