1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<algorithm>
6 #include<queue>
7 using namespace std;
8 #define Maxn 810
9 #define INF 0xfffffff
10
11 struct node
12 {
13 int l,r,id;
14 }t[Maxn*Maxn];
15 struct cmp{bool operator()(node x,node y){return x.r<y.r;}};
16 struct cmp2{bool operator()(node x,node y){return x.r>y.r;}};
17 // bool cmp(node x,node y) {return x.r>y.r;}
18 // bool cmp2(node x,node y) {return x.r<y.r;}
19 bool cmp3(node x,node y) {return x.l<y.l;}
20 priority_queue<node,vector<node>,cmp> q1;
21 priority_queue<node,vector<node>,cmp2> q2;
22
23 char s[Maxn];
24
25 bool vis[Maxn];
26 int op[Maxn][Maxn];
27 int main()
28 {
29 // int T;
30 // scanf("%d",&T);
31 // while(T--)
32 {
33 int n,m,k,l;
34 scanf("%d%d%d%d",&n,&m,&k,&l);
35
36 int cnt=0,id;
37 for(int i=1;i<=n;i++)
38 {
39 scanf("%s",s+1);
40 for(int j=1;j<=m;j++)
41 {
42 if((j==1||s[j-1]==‘0‘)&&s[j]==‘1‘) id=j;
43 else if(j!=1&&s[j-1]==‘1‘&&s[j]==‘0‘) t[++cnt].l=id,t[cnt].r=j-1,t[cnt].id=i;
44 if(s[j]==‘1‘&&j==m) t[++cnt].l=id,t[cnt].r=m,t[cnt].id=i;
45 }
46 }
47 sort(t+1,t+1+cnt,cmp3);
48 // int qz=0;
49 while(!q1.empty()) q1.pop();
50 while(!q2.empty()) q2.pop();
51 int nw=0;
52 bool ok=1;
53 memset(vis,0,sizeof(vis));
54 for(int i=1;i<=m;i++)
55 {
56 int hh=0;
57 while(t[nw+1].l<=i&&nw<cnt) q1.push(t[++nw]);
58 while(!q2.empty()&&q2.top().r<i) {vis[q2.top().id]=0;q2.pop();}
59 while(q2.size()<k)
60 {
61 if(q1.empty()||q1.top().r<i) {ok=0;break;}
62 vis[q1.top().id]=1;
63 q2.push(q1.top());q1.pop();
64 hh++;
65 if(hh>l&&i!=1) break;
66 }
67 if((hh>l&&i!=1)||!ok) {ok=0;break;}
68 while(hh<l&&!q1.empty()&&q1.top().r>q2.top().r)
69 {
70 hh++;
71 vis[q2.top().id]=0;
72 q2.pop();
73 vis[q1.top().id]=1;
74 q2.push(q1.top());q1.pop();
75 }
76 op[i][0]=0;
77 for(int j=1;j<=n;j++) if(vis[j]) op[i][++op[i][0]]=j;
78 }
79 if(!ok) printf("1\n");
80 else
81 {
82 for(int i=1;i<=m;i++)
83 {
84 for(int j=1;j<=op[i][0];j++) printf("%d ",op[i][j]);
85 printf("\n");
86 }
87 }
88 }
89 return 0;
90 }