    #include<bits/stdc++.h>
    using namespace std;
    #define gc getchar_unlocked
    #define fo(i,n) for(i=0;i<n;i++)
    #define Fo(i,k,n) for(i=k;k<n?i<n:i>n;k<n?i+=1:i-=1)
    #define ll long long
    #define si(x)	scanf("%d",&x)
    #define sl(n)	scanf("%lld",&x)
    #define ss(s)	scanf("%s",s)
    #define pi(x)	printf("%d\n",x)
    #define pl(x)	printf("%lld\n",x)
    #define ps(s)	printf("%s\n",s)
    #define deb(x) cout << #x << "=" << x << endl
    #define deb2(x, y) cout << #x << "=" << x << "," << #y << "=" << y << endl
    #define pb push_back
    #define mp make_pair
    #define F first
    #define S second
    #define all(x) x.begin(), x.end()
    #define clr(x) memset(x, 0, sizeof(x))
    #define sortall(x) sort(all(x))
    #define tr(it, a) for(auto it = a.begin(); it != a.end(); it++)
    #define PI 3.1415926535897932384626
    typedef pair<int, int>	pii;
    typedef pair<ll, ll>	pl;
    typedef vector<int>		vi;
    typedef vector<ll>		vl;
    typedef vector<pii>		vpii;
    typedef vector<pl>		vpl;
    typedef vector<vi>		vvi;
    typedef vector<vl>		vvl;
    mt19937_64 rang(chrono::high_resolution_clock::now().time_since_epoch().count());
    int rng(int lim) {
        uniform_int_distribution<int> uid(0,lim-1);
        return uid(rang);
    }
    int mpow(int base, int exp);
    void ipgraph(int n, int m);
    void dfs(int u, int par);

    const int mod = 1'000'000'007;
    const int N = 3e5, M = N;
    //=======================

    vi g[N];
    int a[N];

    void solve() {

       int n;scanf("%d",&n);
       char a[n][n];
       for(int i=0;i<n;i++)
       {
           for(int j=0;j<n;j++)
           {
               char c;cin>>c;
               a[i][j]=c;
           }
       }
       char b[4];
       b[0]=a[0][1],b[1]=a[1][0],b[2] =a[n-2][n-1],b[3]= a[n-1][n-2];
       int cnt{},cnt1{};
       for(int i=0;i<4;i++)
       {
           if(b[i]=='0')cnt++;
           else cnt1++;
       }
       if(cnt1==cnt || cnt==0 || cnt1==0)
       {
           if(b[0]==b[1] && b[2]==b[3])
            cout<<2<<endl<<1<<" "<<2<<endl<<2<<" "<<1<<endl;
           else{
            if(b[0]==b[2])
                cout<<2<<endl<<1<<" "<<2<<endl<<n-1<<" "<<n<<endl;
            else
                cout<<2<<endl<<1<<" "<<2<<endl<<n<<" "<<n-1<<endl;
           }

       }
       else if(cnt>cnt1)
       {
             if(b[2]==b[3])
             {
                 if(b[0]=='0')
                    cout<<1<<endl<<1<<" "<<2<<endl;
                 else cout<<1<<endl<<2<<" "<<1<<endl;
             }
             else
             {
                 if(b[2]=='0')
                    cout<<1<<endl<<n-1<<" "<<n<<endl;
                 else cout<<1<<endl<<n<<" "<<n-1<<endl;
             }
       }
       else{
        if(b[2]==b[3])
             {
                 if(b[0]=='1')
                    cout<<1<<endl<<1<<" "<<2<<endl;
                 else cout<<1<<endl<<2<<" "<<1<<endl;
             }
             else
             {
                 if(b[2]=='1')
                    cout<<1<<endl<<n-1<<" "<<n<<endl;
                 else cout<<1<<endl<<n<<" "<<n-1<<endl;
             }
       }







    }

    int main() {
        ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
        srand(chrono::high_resolution_clock::now().time_since_epoch().count());

        int t = 1;
        cin>>t;
        while(t--) {
          solve();
        }

        return 0;
    }

    int mpow(int base, int exp) {
      base %= mod;
      int result = 1;
      while (exp > 0) {
        if (exp & 1) result = ((ll)result * base) % mod;
        base = ((ll)base * base) % mod;
        exp >>= 1;
      }
      return result;
    }

    void ipgraph(int n, int m){
        int i, u, v;
        while(m--){
            cin>>u>>v;
        u--, v--;
            g[u].pb(v);
            g[v].pb(u);
        }
    }

    void dfs(int u, int par){
        for(int v:g[u]){
            if (v == par) continue;
            dfs(v, u);
        }
    }
