#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
vector< vector< int >> reconstructMatrix( int upper, int lower, vector< int > & colsum) {
int i;
int N = colsum.size ( ) ;
vector< int > tmp( N) ;
vector< vector< int >> res{ tmp, tmp} ;
vector< vector< int >> empty;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
if ( colsum[ i] == 2 ) {
res[ 0 ] [ i] = res[ 1 ] [ i] = 1 ;
upper-- ;
lower-- ;
}
}
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
if ( colsum[ i] == 1 ) {
if ( upper > 0 ) {
upper-- ;
res[ 0 ] [ i] = 1 ;
continue ;
}
lower-- ;
res[ 1 ] [ i] = 1 ;
}
}
if ( upper || lower) {
return empty;
}
return res;
}
}
;
// cLay varsion 20191108-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// vector<vector<int>> reconstructMatrix(int upper, int lower, vector<int>& colsum) {
// int N = colsum.size();
// vector<int> tmp(N);
// vector<vector<int>> res{tmp, tmp}, empty;
//
// rep(i,N) if(colsum[i]==2){
// res[0][i] = res[1][i] = 1;
// upper--;
// lower--;
// }
//
// rep(i,N) if(colsum[i]==1){
// if(upper > 0) upper--, res[0][i] = 1, continue;
// lower--, res[1][i] = 1;
// }
//
// if(upper || lower) return empty;
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gcmVjb25zdHJ1Y3RNYXRyaXgoaW50IHVwcGVyLCBpbnQgbG93ZXIsIHZlY3RvcjxpbnQ+JiBjb2xzdW0pewogICAgaW50IGk7CiAgICBpbnQgTiA9IGNvbHN1bS5zaXplKCk7CiAgICB2ZWN0b3I8aW50PiB0bXAoTik7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IHJlc3t0bXAsIHRtcH07CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGVtcHR5OwogICAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICAgIGlmKGNvbHN1bVtpXT09Mil7CiAgICAgICAgcmVzWzBdW2ldID0gcmVzWzFdW2ldID0gMTsKICAgICAgICB1cHBlci0tOwogICAgICAgIGxvd2VyLS07CiAgICAgIH0KICAgIH0KICAgIGZvcihpPSgwKTtpPChOKTtpKyspewogICAgICBpZihjb2xzdW1baV09PTEpewogICAgICAgIGlmKHVwcGVyID4gMCl7CiAgICAgICAgICB1cHBlci0tOwogICAgICAgICAgcmVzWzBdW2ldID0gMTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBsb3dlci0tOwogICAgICAgIHJlc1sxXVtpXSA9IDE7CiAgICAgIH0KICAgIH0KICAgIGlmKHVwcGVyIHx8IGxvd2VyKXsKICAgICAgcmV0dXJuIGVtcHR5OwogICAgfQogICAgcmV0dXJuIHJlczsKICB9Cn0KOwovLyBjTGF5IHZhcnNpb24gMjAxOTExMDgtMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICB2ZWN0b3I8dmVjdG9yPGludD4+IHJlY29uc3RydWN0TWF0cml4KGludCB1cHBlciwgaW50IGxvd2VyLCB2ZWN0b3I8aW50PiYgY29sc3VtKSB7Ci8vICAgICBpbnQgTiA9IGNvbHN1bS5zaXplKCk7Ci8vICAgICB2ZWN0b3I8aW50PiB0bXAoTik7Ci8vICAgICB2ZWN0b3I8dmVjdG9yPGludD4+IHJlc3t0bXAsIHRtcH0sIGVtcHR5OwovLyAKLy8gICAgIHJlcChpLE4pIGlmKGNvbHN1bVtpXT09Mil7Ci8vICAgICAgIHJlc1swXVtpXSA9IHJlc1sxXVtpXSA9IDE7Ci8vICAgICAgIHVwcGVyLS07Ci8vICAgICAgIGxvd2VyLS07Ci8vICAgICB9Ci8vIAovLyAgICAgcmVwKGksTikgaWYoY29sc3VtW2ldPT0xKXsKLy8gICAgICAgaWYodXBwZXIgPiAwKSB1cHBlci0tLCByZXNbMF1baV0gPSAxLCBjb250aW51ZTsKLy8gICAgICAgbG93ZXItLSwgcmVzWzFdW2ldID0gMTsKLy8gICAgIH0KLy8gCi8vICAgICBpZih1cHBlciB8fCBsb3dlcikgcmV0dXJuIGVtcHR5OwovLyAgICAgcmV0dXJuIHJlczsKLy8gICB9Ci8vIH07Cg==