#include <iostream>
#include <bits/stdc++.h>
using namespace std;
set<int> G[2005];
int indegree[2005];
bool vis[2005];
int n;
vector<int> top_sorted;
set<int> taken;
void dfs(int u)
{
vis[u] = true;
auto i = G[u].end();
for(;i!=G[u].end();++i)
if(!vis[*i])
dfs(*i);
top_sorted.push_back(u);
}
int main()
{
cin>>n;
memset(vis,0,sizeof vis);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
char c;
cin>>c;
if(c == '1')
G[i].insert(j);
}
}
for(int i=n;i>=1;--i)
if(!vis[i])
dfs(i);
vector<pair<int,int> > res;
for(int i=top_sorted.size()-1;i>=0;--i)
{
int u = top_sorted[i];
for(int j=1;j<=n;++j)
if(j!=u && (G[u].find(j) == G[u].end()) && (taken.find(j) == taken.end()))
res.push_back({u,j});
taken.insert(u);
}
cout<<res.size()<<endl;
sort(res.begin(),res.end());
for(int i=0;i<res.size();++i)
cout<<res[i].first<<" "<<res[i].second<<endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc2V0PGludD4gR1syMDA1XTsKaW50IGluZGVncmVlWzIwMDVdOwpib29sIHZpc1syMDA1XTsKaW50IG47CnZlY3RvcjxpbnQ+IHRvcF9zb3J0ZWQ7CnNldDxpbnQ+IHRha2VuOwp2b2lkIGRmcyhpbnQgdSkKewogICAgdmlzW3VdID0gdHJ1ZTsKICAgIGF1dG8gaSA9IEdbdV0uZW5kKCk7CiAgICBmb3IoO2khPUdbdV0uZW5kKCk7KytpKQogICAgCWlmKCF2aXNbKmldKQogICAgCQlkZnMoKmkpOwogICAgdG9wX3NvcnRlZC5wdXNoX2JhY2sodSk7Cn0KaW50IG1haW4oKQp7CgogIGNpbj4+bjsKICBtZW1zZXQodmlzLDAsc2l6ZW9mIHZpcyk7CiAgZm9yKGludCBpPTE7aTw9bjsrK2kpCiAgewogICAgZm9yKGludCBqPTE7ajw9bjsrK2opCiAgICB7CiAgICAgICAgY2hhciBjOwogICAgICAgIGNpbj4+YzsKICAgICAgICBpZihjID09ICcxJykKICAgICAgICAgICAgR1tpXS5pbnNlcnQoaik7CiAgICB9CiAgfQogIGZvcihpbnQgaT1uO2k+PTE7LS1pKQogICAgaWYoIXZpc1tpXSkKICAgICAgICBkZnMoaSk7CiAgdmVjdG9yPHBhaXI8aW50LGludD4gPiByZXM7CiAgZm9yKGludCBpPXRvcF9zb3J0ZWQuc2l6ZSgpLTE7aT49MDstLWkpCiAgewogICAgaW50IHUgPSB0b3Bfc29ydGVkW2ldOwogICAgZm9yKGludCBqPTE7ajw9bjsrK2opCiAgICAgICAgaWYoaiE9dSAmJiAoR1t1XS5maW5kKGopID09IEdbdV0uZW5kKCkpICYmICh0YWtlbi5maW5kKGopID09IHRha2VuLmVuZCgpKSkKICAgICAgICAgICAgcmVzLnB1c2hfYmFjayh7dSxqfSk7CgogICAgdGFrZW4uaW5zZXJ0KHUpOwogIH0KICBjb3V0PDxyZXMuc2l6ZSgpPDxlbmRsOwogIHNvcnQocmVzLmJlZ2luKCkscmVzLmVuZCgpKTsKICBmb3IoaW50IGk9MDtpPHJlcy5zaXplKCk7KytpKQogICAgY291dDw8cmVzW2ldLmZpcnN0PDwiICI8PHJlc1tpXS5zZWNvbmQ8PGVuZGw7CgoKCgoKCn0K