// TOPOSORT by muoii
// https://v...content-available-to-author-only...j.com/problems/NKLEAGUE/
#include <bits/stdc++.h>
using namespace std;
#define tag "main"
#define maxn 1007
#define oo 1000000007LL
#define mid ((l+r)>>1)
#define getbit(x,i) ((x)>>(i)&1)
#define onbit(x,i) ((x)|(1<<(i)))
#define offbit(x,i) ((x)&~(1<<(i)))
#define cntbit(x) (__builtin_popcountll(x))
#define meset(a,x) memset(a,x,sizeof(a))
#define forinc(i,a,b) for(int i=a;i<=b;i++)
#define fordec(i,a,b) for(int i=a;i>=b;i--)
#define debug(x) cerr<<#x<<" = "<<x<<"\n"
#define runtime(stime) ((clock() - stime) / CLOCKS_PER_SEC * 1000)
#define checkfile(FiLeNaMe) { if(fopen(FiLeNaMe".inp","r")) freopen(FiLeNaMe".inp","r",stdin),freopen(FiLeNaMe".out","w",stdout); }
template<typename T> inline void inp(T &x) { static char k; static bool neg; while((k=getchar())!='-' && !isdigit(k)); neg = k=='-'; x=(neg=k=='-')?0:k-48; while(isdigit(k=getchar())) x = (x<<3) + (x<<1) +  k-48; x=neg?-x:+x; }
template<typename T> inline void out(T x) { if(x<0) putchar('-'),x=-x; if(x>9) out(x/10); putchar(x%10+48); }
#define space putchar(' ')
#define endline putchar('\n')
#define inpint ({ int x; inp(x); x; })
#define inpchar ({ char k; while((k=getchar())==' ' || k=='\n'); k; })
#define inpstr ({ char k; while((k=getchar())==' ' || k=='\n'); string s=""; s+=k; while((k=getchar())!=' ' && k!='\n') s+=k; s; })
 
/// --------------------------------------------------------------------------------------------------------------------------------
#define long long long
long n,m;
vector<int> adj[maxn];
int numbering;
int num[maxn],pos[maxn];
bool dd[maxn];
int f[maxn];
int trace[maxn];
 
void dfs(int u) {
    if(dd[u]) return;
 
    dd[u] = 1;
 
    for(int v : adj[u]) dfs(v);
 
    num[u] = numbering;
    pos[numbering] = u;
    --numbering;
}
 
bool topo_sort() {
    bool ans = 1;
 
    numbering = n;
 
    forinc(i,1,n) dfs(i);
 
    return ans;
}
void enter(){
    cin>>n;
 
    char x;
 
    forinc(i,1,n)
        forinc(j,1,n) {
            cin>>x;
            if(x=='1') adj[i].push_back(j);
        }
}
 
void solve(){
    topo_sort();
 
    f[n]=1;
    fordec(i,n-1,1) {
        int u = pos[i];
 
        for(int v : adj[u]) {
            int j = num[v];
            if(f[i]<f[j]+1) {
                f[i]=f[j]+1;
                trace[i]=j;
            }
        }
    }
 
    int res = 1;
    forinc(i,1,n) if(f[i]>f[res]) res=i;
 
    if(f[res]<n) cout<<-1;
    else for(int i=res,v=pos[i];v>0;i=trace[i],v=pos[i]) cout<<v<<" ";
}
 
int32_t main()
{
    checkfile(tag);
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
 
    enter();
    solve();
 
    return 0;
}
 