#include <bits/stdc++.h>
using namespace std;
#define SZ(s) (int)s.size()
#define ll long long
const int N = 5e5 + 5;
int n, k, t, a[N], sz, vis[N], b[N], y;
vector <int> v;
void f1(int x, int cnt){
if(x == sz){
int y1 = y;
for(int i = 0; i < sz; i++){
if(b[i] == 1) y1 ^= (1<<i);
}
if(!vis[y1]) v.push_back(y1);
return;
}
if(sz-x+cnt < k) return;
f1(x+1,cnt);
if(cnt == k) return;
for(int i = 0; i < sz; i++){
if(b[i] == 0){
b[i] = 1;
f1(x+1,cnt+1);
b[i] = 0;
}
}
}
int f(int ind){
if(ind == (1<<n)+1) return (__builtin_popcount(a[ind-1]^a[1]) == k);
y = a[ind-1];
f1(0, 0);
vector <int> v1 = v;
v.clear();
for(auto i : v1){
if(__builtin_popcount(a[ind-1]^i) == k and !vis[i]){
a[ind] = i;
vis[i] = true;
if(f(ind+1)) return true;
vis[i] = false;
}
}
return false;
}
int main(){
ios::sync_with_stdio(false); cin.tie(nullptr);
string s;
cin >> n >> k >> t >> s;
ll x = 0;
sz = SZ(s);
int cnt = -1;
for(int i = sz-1; i >= 0; i--){
cnt++;
if(s[i] == '0') continue;
x += (1<<cnt);
}
a[1] = x;
vis[x] = true;
if(!f(2)){
cout << "-1\n";
return 0;
}
cout << (1<<n) << '\n';
for(int i = 1; i <= (1<<n); i++){
vector <int> v;
while(a[i]){
v.push_back(a[i]%2);
a[i] /= 2;
}
while(SZ(v) < sz) v.push_back(0);
reverse(v.begin(), v.end());
for(auto j : v){
cout << j;
}
cout << '\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |