#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//using namespace __gnu_pbds;
using namespace std;
/* #pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")*/
typedef long long ll;
const ll MAXK = 3e3 + 5;
const ll MOD = 1e9 + 7;
const ll MODH = 1e9 + 9;
const int MAXLG = 20;
const long double PI = acos(-1);
const ll p = 41;
const long double EPS = 1e-4;
#define x first
#define y second
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
inline ll rand(ll a, ll b) {ll c = rng(); return a+((ll)abs(c))%(b-a+1);}
ll binpowmod(ll a, ll b, ll m) {a %= m;ll res = 1;while (b > 0) {if (b & 1){res = res * a % m;}a = a * a % m;b >>= 1;
}return res;}
//typedef tree<ll, null_type, less_equal<ll>, rb_tree_tag, //less_equal
// tree_order_statistics_node_update> oset;
const int MAXN = 1e6 + 5;
bool bad = 0;
int n,x,y,z;
int cnt = 0;
void do_special(string &a,string &b,string &s,vector<char> &ans)
{
for(int i = 0 ; i < n ; i++)
{
int aa = a[i] - '0';
int bb = b[i] - '0';
int ss = s[i] - '0';
if(aa != bb and ss == 0)
{
if(!x)
{
bad = 1;
return;
}
else
{
++cnt;
--x;
ans[i] = '&';
}
}
else if(aa == bb)
{
if(ss == 0 and aa == 1)
{
if(z)
{++cnt;
--z;
ans[i] = '^';
}
else
{
bad = 1;
return;
}
}
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
while(t--)
{
bad = 0;
cin >> n >> x >> y >> z;
string a,b,s;
cin >> a >> b >> s;
vector<char> ans(n,'#');
do_special(a,b,s,ans);
for(int i = 0 ; i < n ; i++)
{
if(ans[i] != '#')
continue;
int aa = a[i] - '0';
int bb = b[i] - '0';
int ss = s[i] - '0';
if(aa == 0 and bb == 0 and ss == 1)
{
bad = 1;
break;
}
if(aa != bb and ss == 1)
{
if(z) // or
{++cnt;
--z;
ans[i] = '^';
}
else if(y) //xor
{++cnt;
--y;
ans[i] = '|';
}
else
{
// cout << x << ' ' << y << ' ' << z << ' '<< i << " 1 0 1\n";
bad = 1;
break;
}
}
else if(aa == bb and aa == 1 and ss == 1)
{
if(x) // or
{
--x;
ans[i] = '&';
}
else if(y) //and
{
--y;
ans[i] = '|';
}
else
{
// cout << "1 1 1\n";
bad = 1;
break;
}
}
}
for(int i = 0 ; i < n ; i++)
{
if(ans[i] != '#')
continue;
int aa = a[i] - '0';
int bb = b[i] - '0';
int ss = s[i] - '0';
if(aa == bb and aa == 0 and ss == 0)
{
if(y) // or
{
--y;
ans[i] = '|';
}
else if(x) //and
{
--x;
ans[i] = '&';
}
else if(z)
{
--z;
ans[i] = '^';
}
else
{
// cout << "0 0 0\n";
bad = 1;
break;
}
}
}
// cout << x << ' ' << y << ' ' << z << endl;
if(!bad)
{
cout << "YES\n";
for(auto &k : ans)
cout << k;
cout << '\n';
}
else
cout << "NO";
}
}
Copy