Source Code
#include <bits/stdc++.h>
 
#define ll long long
#define mk make_pair
#define pb push_back
#define f first
#define s second
using namespace std;
 
ll mod = 1e9 + 7 ;
 
const int N = 1e6 + 10 ;
 
 
 
void solve(){
 
	int n , andd , orr , xorr ; 
	cin >> n >> andd >> orr >> xorr ; 
	string a , b , c ; 
	cin >> a >> b >> c ; 
 
	string v = "" ;
	for(int i=0 ; i<n ; i++) v += '-'; 
	
	for(int i=0 ; i<n ; i++){
		if(a[i] == '1' && b[i] == '1' && c[i] == '0'){
			if(xorr){
				xorr--;
				v[i] = '^';
			}
			else{
				cout << "NO" ;
				return ;
			}
		}
		if( (a[i] - '0' + b[i] - '0') == 1 && c[i] == '0' ){
			if(andd){
				andd--;
				v[i] = '&';
			}
			else{
				cout << "NO" ;
				return ;
			}
		}
	} 
	for(int i=0 ; i<n ; i++){
		if(v[i] != '-') continue ;
		if(a[i] == '0' && b[i] == '0' && c[i] == '1'){
			cout << "NO" ; 
			return;
		}
		if(a[i] == '1' && b[i] == '1' && c[i] == '1'){
			if(andd){ 
				andd--;
				v[i] = '&' ;
			}
			else{
				if(orr){
					orr--;
					v[i] = '|' ;
				}
				else{
					cout << "NO" ; 
					return ;
				}
			}
		}
		if( (a[i] - '0' + b[i] - '0') == 1 && c[i] == '1' ){
			if(xorr){
				xorr--;
				v[i] = '^' ;
			}
			else{
				if(orr){
					orr--;
					v[i] = '|' ;
				}
				else{
					cout << "NO" ; 
					return ;
				}
			}
		}
	}
	for(int i=0 ; i<n ; i++){
		if(v[i] == '-'){
			if(andd){
				andd--;
				v[i] = '&' ;
			}
			else if(orr){
				orr--;
				v[i] = '|' ;
			}
			else{
				xorr--;
				v[i] = '^';
			}
		}
	}
	cout << "YES\n" << v ;
 
 
		
 
 
}
 
int main(){
	int t = 1  ;
	// cin >> t ;
	while(t--){
		solve();
	}
 
 
	return 0 ;
}       
Copy
Binary String Tuff1aha
GNU G++17
22 ms
1.2 MB
Accepted