#include #include #include #include using namespace std; using namespace std::tr1; #define MAX_N 1000 struct numbers { int val, pos; }; numbers a[MAX_N], b[MAX_N]; unordered_map< int, bool > h; void read( int &n, int &m ) { scanf( "%d%d", &n, &m ); for ( int i = 0; i < n; ++i ) { scanf( "%d", &a[i].val ); a[i].pos = i; } for ( int i = 0; i < m; ++i ) { scanf( "%d", &b[i].val ); b[i].pos = i; } b[m].val = 0; b[m].pos = m; ++m; } inline bool cmp1( numbers x, numbers y ) { return x.val < y.val; } inline bool cmp2( numbers x, numbers y ) { return x.pos < y.pos; } int main() { int n, m; read( n, m ); sort( a, a + n, cmp1 ); sort( b, b + m, cmp1 ); int count = 0; for ( int i = 0; i < n; ++i ) for ( int j = m - 1; j >= 0; --j ) { int this_val = a[i].val - b[j].val; if ( h.find( this_val ) == h.end() ) { ++count; h[this_val] = true; a[i].val -= b[j].val; break; } } printf( "%d\n", count ); sort( a, a + n, cmp2 ); for ( int i = 0; i < n; ++i ) printf( "%d ", a[i].val ); }