<s> class Solution ( object ) : <EOL> def maxNumber ( self , nums1 , nums2 , k ) : <EOL> """<STR_LIT>""" <EOL> def get_max_digits ( nums , start , end , max_digits ) : <EOL> max_digits [ end ] = max_digit ( nums , end ) <EOL> for i in reversed ( xrange ( start , end ) ) : <EOL> max_digits [ i ] = delete_digit ( max_digits [ i + <NUM_LIT:1> ] ) <EOL> def max_digit ( nums , k ) : <EOL> drop = len ( nums ) - k <EOL> res = [ ] <EOL> for num in nums : <EOL> while drop and res and res [ - <NUM_LIT:1> ] < num : <EOL> res . pop ( ) <EOL> drop -= <NUM_LIT:1> <EOL> res . append ( num ) <EOL> return res [ : k ] <EOL> def delete_digit ( nums ) : <EOL> res = list ( nums ) <EOL> for i in xrange ( len ( res ) ) : <EOL> if i == len ( res ) - <NUM_LIT:1> or res [ i ] < res [ i + <NUM_LIT:1> ] : <EOL> res = res [ : i ] + res [ i + <NUM_LIT:1> : ] <EOL> break <EOL> return res <EOL> def merge ( a , b ) : <EOL> return [ max ( a , b ) . pop ( <NUM_LIT:0> ) for _ in xrange ( len ( a ) + len ( b ) ) ] <EOL> m , n = len ( nums1 ) , len ( nums2 ) <EOL> max_digits1 , max_digits2 = [ [ ] for _ in xrange ( k + <NUM_LIT:1> ) ] , [ [ ] for _ in xrange ( k + <NUM_LIT:1> ) ] <EOL> get_max_digits ( nums1 , max ( <NUM_LIT:0> , k - n ) , min ( k , m ) , max_digits1 ) <EOL> get_max_digits ( nums2 , max ( <NUM_LIT:0> , k - m ) , min ( k , n ) , max_digits2 ) <EOL> return max ( merge ( max_digits1 [ i ] , max_digits2 [ k - i ] ) for i in xrange ( max ( <NUM_LIT:0> , k - n ) , min ( k , m ) + <NUM_LIT:1> ) ) </s>
