#include #include #include #include #include #include #include using namespace std; using uint = unsigned int; using ll = long long; #define CIN( LL , A ) LL A; cin >> A #define GETLINE( A ) string A; getline( cin , A ) #define GETLINE_SEPARATE( A , SEPARATOR ) string A; getline( cin , A , SEPARATOR ) #define FOR_LL( VAR , INITIAL , FINAL_PLUS_ONE ) for( ll VAR = INITIAL ; VAR < FINAL_PLUS_ONE ; VAR ++ ) #define FOR_ITR( ARRAY , ITR , END ) for( auto ITR = ARRAY .begin() , END = ARRAY .end() ; ITR != END ; ITR ++ ) #define REPEAT( HOW_MANY_TIMES ) FOR_LL( VARIABLE_FOR_REPEAT , 0 , HOW_MANY_TIMES ) #define RETURN( ANSWER ) cout << ( ANSWER ) << endl; return 0 #define DOUBLE( PRECISION , ANSWER ) cout << fixed << setprecision( PRECISION ) << ( ANSWER ) << endl; return 0 #define MIN( A , B ) A < B ? A : B; #define MAX( A , B ) A < B ? B : A; template inline T Distance( const T& a , const T& b ){ return a < b ? b - a : a - b; } #include // 自分のライブラリ(https://github.com/p-adic/cpp)よりソースコードをコピーして編集している。 template class AffineSpace { private: T m_v[D]; public: inline AffineSpace(); inline AffineSpace( const initializer_list init ); template inline AffineSpace( const T (&v)[E] ); template inline AffineSpace( const AffineSpace& x ); // E < Dの場合のみサポート template inline AffineSpace( const uint& E , const ARGS&... args ); template inline AffineSpace& operator=( const AffineSpace& x ); T& operator[]( const uint& i ); const T& operator[]( const uint& i ) const; private: template void Set( const T (&v)[E] ); void Substitute( const initializer_list init ); template void Substitute( const T (&v)[E] ); template void Substitute( const AffineSpace& x ); }; template inline AffineSpace::AffineSpace() : m_v() {}; template inline AffineSpace::AffineSpace( const initializer_list init ) : m_v() { Substitute( init ); } template template inline AffineSpace::AffineSpace( const T (&v)[E] ) : m_v() { Substitute( v ); } template template inline AffineSpace::AffineSpace( const AffineSpace& x ) : m_v() { Substitute( x ); } template template inline AffineSpace::AffineSpace( const uint& E , const ARGS&... args ) : AffineSpace( args... ) { m_v[E]++; } template template inline AffineSpace& AffineSpace::operator=( const AffineSpace& x ) { Set( x.m_v ); return *this; } template inline T& AffineSpace::operator[]( const uint& i ) { return m_v[i]; } template inline const T& AffineSpace::operator[]( const uint& i ) const { return m_v[i]; } template template void AffineSpace::Set( const T (&v)[E] ) { Substitute( v ); constexpr const uint min = E < D ? E : D; for( uint i = min ; i < D ; i++ ){ m_v[i] = 0; } return; } template void AffineSpace::Substitute( const initializer_list init ) { const uint size = init.size(); const uint min = size < D ? size : D; auto itr = init.begin(); for( uint i = 0 ; i < min ; i++ ){ m_v[i] = *itr; itr++; } return; } template template void AffineSpace::Substitute( const T (&v)[E] ) { constexpr const uint min = E < D ? E : D; for( uint i = 0 ; i < min ; i++ ){ m_v[i] = v[i]; } return; } template template void AffineSpace::Substitute( const AffineSpace& x ) { constexpr const uint min = E < D ? E : D; for( uint i = 0 ; i < min ; i++ ){ m_v[i] = x[i]; } return; } #define N 2048 #define D 256 bool CheckSolution( const list >& restriction , const AffineSpace& x ); int main() { AffineSpace x{}; list > restriction{}; FOR_LL( i , 0 , N ){ CIN( uint , a ); CIN( uint , b ); CIN( uint , c ); CIN( ll , p ); CIN( ll , q ); CIN( ll , r ); restriction.push_back( AffineSpace( { a , b , c , p , q , r } ) ); bool solvable = CheckSolution( restriction , x ); if( ! solvable ){ FOR_LL( d , 0 , D ){ x[d] = 1 - x[d]; if( CheckSolution( restriction , x ) ){ solvable = true; d = D; } else { x[d] = 1 - x[d]; } } } if( ! solvable ){ FOR_LL( d0 , 0 , D ){ FOR_LL( d1 , 0 , D ){ x[d0] = 1 - x[d0]; x[d1] = 1 - x[d1]; if( CheckSolution( restriction , x ) ){ solvable = true; d0 = D; d1 = D; } else { x[d0] = 1 - x[d0]; x[d1] = 1 - x[d1]; } } } } if( ! solvable ){ if( i < 10 ){ FOR_LL( d0 , 0 , D ){ FOR_LL( d1 , 0 , D ){ FOR_LL( d2 , 0 , D ){ x[d0] = 1 - x[d0]; x[d1] = 1 - x[d1]; x[d2] = 1 - x[d2]; if( CheckSolution( restriction , x ) ){ solvable = true; d0 = D; d1 = D; d2 = D; } else { x[d0] = 1 - x[d0]; x[d1] = 1 - x[d1]; x[d2] = 1 - x[d2]; } } } } } } if( ! solvable ){ i = N; } } FOR_LL( d , 0 , D ){ cout << x[D - 1 - d]; } RETURN( "" ); } bool CheckSolution( const list >& restriction , const AffineSpace& x ) { FOR_ITR( restriction , itr , end ){ const AffineSpace& r = *itr; bool b = false; FOR_LL( k , 0 , 3 ){ if( x[r[k]] == r[k+3] ){ b = true; k = 3; } } if( !b ){ return false; } } return true; }