Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define INF (int)10e6
- #define eps 10e-6
- #define mp make_pair
- #define pb push_back
- #define all(t) t.begin(),t.end()
- #define LL long long
- #define MOD 1000000007
- #define x first
- #define y second
- using namespace std;
- int n;
- int a[5000][20];
- int pos[5000];
- int pw;
- bool check(int mask1,int mask2){
- mask1=mask1%(pw + 1);
- mask2=mask2%(pw + 1);
- int cnt=0;
- for(int i=0;i<n;++i)
- if(a[mask1][i]!=a[mask2][i])
- cnt++;
- if(cnt==1)
- return true;
- return false;
- }
- bool go(int mask){
- if(mask==pw+1){
- for(int i=1;i<=(1<<n);++i){
- if(!check(i,i+1))
- return false;
- }
- return true;
- }
- a[mask][pos[mask]]=1;
- if(go(mask+1))
- return true;
- a[mask][pos[mask]]=0;
- if(go(mask+1))
- return true;
- return false;
- }
- void Print(){
- cout << "YES\n";
- for(int i=1;i<=(1<<n);++i){
- for(int j=0;j<n;++j)
- cout << a[i][j];
- cout << "\n";
- }
- }
- int main(){
- freopen("gray-code.in","r",stdin);
- freopen("gray-code.out","w",stdout);
- cin >> n; pw=1<<n;
- for(int i=1;i<=(1<<n);++i){
- string s; cin >> s;
- for(int j=0;j<n;++j){
- if(s[j]=='0')
- a[i][j]=0;
- else if(s[j]=='1')
- a[i][j]=1;
- else if(s[j]=='?'){
- a[i][j]=-1;
- pos[i]=j;
- }
- }
- }
- if(go(1)){
- Print();
- return 0;
- }
- cout << "NO";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement