First determine if it is possible to solve.
For this problem, just think of it as
XOO
XOO
XOO
and cast spells like this or
XXX
OOO
OOO
If there is an evil area, just cast the spell one grid down.
This ensures that it is the fastest and can definitely eliminate all.
//====================================================================||
// Name : Purification.cpp ||
// Date : 2013/7/21 下午1:29:22 ||
// Author : GCA ||
// 6AE7EE02212D47DAD26C32C0FE829006 ||
//====================================================================||
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <climits>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <cctype>
#include <utility>
using namespace std;
#ifdef ONLINE\_JUDGE
#define ll "%lld"
#else
#define ll "%I64d"
#endif
typedef unsigned int uint;
typedef long long int Int;
#define Set(a,s) memset(a,s,sizeof(a))
#define Write(w) freopen(w,"w",stdout)
#define Read(r) freopen(r,"r",stdin)
#define Pln() printf("\\n")
#define I\_de(x,n)for(int i=0;i<n;i++)printf("%d ",x\[i\]);Pln()
#define De(x)printf(#x"%d\\n",x)
#define For(i,x)for(int i=0;i<x;i++)
#define CON(x,y) x##y
#define Pmz(dp,nx,ny)for(int hty=0;hty<ny;hty++){for(int htx=0;htx<nx;htx++){\\
printf("%d ",dp\[htx\]\[hty\]);}Pln();}
#define M 105
#define PII pair<int,int\>
#define PB push\_back
#define oo INT\_MAX
#define Set\_oo 0x3f
#define Is\_debug true
#define debug(...) if(Is\_debug)printf("DEBUG: "),printf(\_\_VA\_ARGS\_\_)
#define FOR(it,c) for(\_\_typeof((c).begin()) it=(c).begin();it!=(c).end();it++)
#define eps 1e-6
bool xdy(double x,double y){return x>y+eps;}
bool xddy(double x,double y){return x>y-eps;}
bool xcy(double x,double y){return x<y-eps;}
bool xcdy(double x,double y){return x<y+eps;}
int min3(int x,int y,int z){
int tmp=min(x,y);
return min(tmp,z);
}
int max3(int x,int y,int z){
int tmp=max(x,y);
return max(tmp,z);
}
int n;
char mz\[M\]\[M\];
int nx\[M\],ny\[M\];
void solve(){
Set(nx,0);
Set(ny,0);
bool fx=true,fy=true;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(mz\[i\]\[j\]=='E'){
nx\[i\]++;
ny\[j\]++;
}
}
}
for(int i=0;i<n;i++){
if(nx\[i\]==n){
fx=false;
}
if(ny\[i\]==n){
fy=false;
}
}
if(!fx&&!fy)puts("-1");
else{
if(fx){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(mz\[i\]\[j\]=='.'){
printf("%d %d\\n",i+1,j+1);
break;
}
}
}
}else{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(mz\[j\]\[i\]=='.'){
printf("%d %d\\n",j+1,i+1);
break;
}
}
}
}
}
}
int main() {
ios\_base::sync\_with\_stdio(0);
while(~scanf("%d",&n)){
for(int i=0;i<n;i++)scanf("%s",mz\[i\]);
solve();
}
}