提交时间:2024-06-23 18:34:46
运行 ID: 30338
#include<bits/stdc++.h> using namespace std; #define pb push_back inline int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}x=c-'0';c=getchar();while(c<='9'&&c>='0'){x*=10;x+=c-'0';c=getchar();}return x*f;} const int MAXN=200010; int n,m,b,p; char c[MAXN*5]; struct Edge{int id,v; bool operator<(const Edge&G)const{ return id<G.id; } }; vector<Edge>G[MAXN]; int cd[MAXN],rd[MAXN]; void add_side(int u,int v,int id){G[u].pb({id,v}),cd[u]++,rd[v]++;} int cur[MAXN],vis[MAXN]; stack<int>st; void dfs(int u){ for(int i=cur[u]+1;i<G[u].size();i=cur[u]+1){ int v=G[u][i].v,id=G[u][i].id; cur[u]=i; dfs(v); st.push(id); } } void ol(){ dfs(b); } void slv(){ n=read(),m=read(),b=read(); for(int i=1;i<=n;i++){ scanf("%s",c+1); p=strlen(c+1); int u=0,v=0; for(int j=1;j<=p;j++){ if(c[j]=='1')break; u++; } int lst1=0; for(int j=1;j<=p;j++){ if(c[j]=='1'){ if(lst1&&(j-lst1-1)%m!=m-1){ printf("-1"); return; } lst1=j; } } for(int j=p;j;j--){ if(c[j]=='1')break; v++; } // cout<<" "<<p<<" "<<u<<" "<<v<<endl; u%=m,v%=m; add_side(u,(m-v-1)%m,i); } for(int i=0;i<m;i++)sort(G[i].begin(),G[i].end()),cur[i]=-1; ol(); if(st.size()!=n)printf("-1"); else{ while(!st.empty()){ printf("%d ",st.top()); st.pop(); } } } signed main(){ slv(); return 0; }