class  Solution : def  merge ( self,  intervals:  List[ List[ int ] ] )  - >  List[ List[ int ] ] : intervals. sort( key= lambda  p:  p[ 0 ] )   ans =  [ ] for  p in  intervals: if  ans and  p[ 0 ]  <=  ans[ - 1 ] [ 1 ] :   ans[ - 1 ] [ 1 ]  =  max ( ans[ - 1 ] [ 1 ] ,  p[ 1 ] )   else :   ans. append( p)   return  ansclass  Solution : def  monotoneIncreasingDigits ( self,  N:  int )  - >  int : nums =  list ( str ( N) ) length =  len ( nums) begin =  0 is_result =  True max_num =  float ( '-inf' ) for  i in  range ( 1 ,  length) : num =  int ( nums[ i] ) pre_num =  int ( nums[ i -  1 ] ) if  pre_num >  max_num: begin =  i -  1 max_num =  pre_numif  pre_num >  num: is_result =  False break if  is_result: return  Nnums[ begin]  =  str ( int ( nums[ begin] )  -  1 ) for  i in  range ( begin +  1 ,  length) : nums[ i]  =  '9' return  int ( "" . join( nums) ) 
class  Solution : def  minCameraCover ( self,  root:  Optional[ TreeNode] )  - >  int : def  dfs ( node) : if  node is  None : return  inf,  0 ,  0   l_choose,  l_by_fa,  l_by_children =  dfs( node. left) r_choose,  r_by_fa,  r_by_children =  dfs( node. right) choose =  min ( l_choose,  l_by_fa)  +  min ( r_choose,  r_by_fa)  +  1 by_fa =  min ( l_choose,  l_by_children)  +  min ( r_choose,  r_by_children) by_children =  min ( l_choose +  r_by_children,  l_by_children +  r_choose,  l_choose +  r_choose) return  choose,  by_fa,  by_childrenchoose,  _,  by_children =  dfs( root)   return  min ( choose,  by_children)