#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];
map <pair<int,int>, bool> dp;
int f(int ind){
if(dp.find({ind,a[ind-1]}) != dp.end()) return dp[{ind,a[ind-1]}];
if(ind == (1<<n)+1) return (__builtin_popcount(a[ind-1]^a[1]) == k);
for(int i = 0; i < (1<<sz); i++){
if(__builtin_popcount(a[ind-1]^i) == k and !vis[i]){
a[ind] = i;
vis[i] = true;
if(f(ind+1)){
dp[{ind+1,a[ind]}] = true;
return true;
}
vis[i] = false;
}
}
dp[{ind,a[ind-1]}] = 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... |