


'''simple docstring'''







def 				lowerCAmelCase__	(    lowerCamelCase					:      str       ):
       return credit_card_number.startswith(('34', '35', '37', '4', '5', '6')       )






def 				lowerCAmelCase__	(    lowerCamelCase					:      str       ):
       _A					:     List[str]     = credit_card_number
       _A					:     Dict     = 0
       _A					:     int     = len(lowerCamelCase       ) - 2
       for i in range(lowerCamelCase  ,-1  ,-2       ):
              #  double the value of every second digit
              _A					:     int     = int(cc_number[i]       )
              digit *= 2
              # If doubling of a number results in a two digit number
              # i.e greater than 9(e.g., 6 × 2 = 12),
              # then add the digits of the product (e.g., 12: 1 + 2 = 3, 15: 1 + 5 = 6),
              # to get a single digit number.
              if digit > 9:
                     digit %= 10
                     digit += 1
              _A					:     Union[str, Any]     = cc_number[:i] + str(lowerCamelCase       ) + cc_number[i + 1 :]
              total += digit

       # Sum up the remaining digits
       for i in range(len(lowerCamelCase       ) - 1  ,-1  ,-2       ):
              total += int(cc_number[i]       )

       return total % 10 == 0






def 				lowerCAmelCase__	(    lowerCamelCase					:      str       ):
       _A					:     str     = F'{credit_card_number} is an invalid credit card number because'
       if not credit_card_number.isdigit():
              print(F'{error_message} it has nonnumerical characters.'       )
              return False

       if not 13 <= len(lowerCamelCase       ) <= 16:
              print(F'{error_message} of its length.'       )
              return False

       if not validate_initial_digits(lowerCamelCase       ):
              print(F'{error_message} of its first two digits.'       )
              return False

       if not luhn_validation(lowerCamelCase       ):
              print(F'{error_message} it fails the Luhn check.'       )
              return False

       print(F'{credit_card_number} is a valid credit card number.'       )
       return True


if __name__ == "__main__":
   import doctest

   doctest.testmod()
   validate_credit_card_number('''4111111111111111''')
   validate_credit_card_number('''32323''')










'''simple docstring'''







def 				lowerCAmelCase__	(    lowerCamelCase					:      int  ,lowerCamelCase					:      list[int]  ,lowerCamelCase					:      int       ):

       def count_of_possible_combinations(lowerCamelCase					:      int       ) -> int:
              if target < 0:
                     return 0
              if target == 0:
                     return 1
              return sum(count_of_possible_combinations(target - item       ) for item in array       )

       return count_of_possible_combinations(lowerCamelCase       )






def 				lowerCAmelCase__	(    lowerCamelCase					:      int  ,lowerCamelCase					:      list[int]  ,lowerCamelCase					:      int       ):

       def count_of_possible_combinations_with_dp_array(
           lowerCamelCase					:      int  ,lowerCamelCase					:      list[int]       ) -> int:
              if target < 0:
                     return 0
              if target == 0:
                     return 1
              if dp_array[target] != -1:
                     return dp_array[target]
              _A					:     Optional[Any]     = sum(
                  count_of_possible_combinations_with_dp_array(target - item  ,lowerCamelCase       )
                  for item in array       )
              _A					:     List[str]     = answer
              return answer

       _A					:     Optional[int]     = [-1] * (target + 1)
       return count_of_possible_combinations_with_dp_array(lowerCamelCase  ,lowerCamelCase       )






def 				lowerCAmelCase__	(    lowerCamelCase					:      int  ,lowerCamelCase					:      list[int]  ,lowerCamelCase					:      int       ):
       _A					:     Dict     = [0] * (target + 1)
       _A					:     List[str]     = 1

       for i in range(1  ,target + 1       ):
              for j in range(lowerCamelCase       ):
                     if i - array[j] >= 0:
                            dp_array[i] += dp_array[i - array[j]]

       return dp_array[target]


if __name__ == "__main__":
   import doctest

   doctest.testmod()
   A				:					Dict    						=			3
   A				:					Union[str, Any]    						=			5
   A				:					Union[str, Any]    						=			[1, 2, 5]
   print(combination_sum_iv(n, array, target))






