


'''simple docstring'''


def        __lowerCAmelCase       (__lowerCAmelCase      ):

		# bit count represents no. of bits in the gray code
		if bit_count < 0:
				raise ValueError("The given input must be positive"      )

		# get the generated string sequence
		_UpperCAmelCase						:				Dict	    =					gray_code_sequence_string(__lowerCAmelCase      )
		#
		# convert them to integers
		for i in range(len(__lowerCAmelCase      )      ):
				_UpperCAmelCase						:				Any	    =					int(sequence[i]					,       2      )

		return sequence






def        __lowerCAmelCase       (__lowerCAmelCase      ):

		# The approach is a recursive one
		# Base case achieved when either n = 0 or n=1
		if bit_count == 0:
				return ["0"]

		if bit_count == 1:
				return ["0", "1"]

		_UpperCAmelCase						:				Any	    =					1 << bit_count  # defines the length of the sequence
		# 1<< n is equivalent to 2^n

		# recursive answer will generate answer for n-1 bits
		_UpperCAmelCase						:				Optional[Any]	    =					gray_code_sequence_string(bit_count - 1      )

		_UpperCAmelCase						:				List[str]	    =					[]

		# append 0 to first half of the smaller sequence generated
		for i in range(seq_len // 2      ):
				_UpperCAmelCase						:				Optional[Any]	    =					"0" + smaller_sequence[i]
				sequence.append(__lowerCAmelCase      )

		# append 1 to second half ... start from the end of the list
		for i in reversed(range(seq_len // 2      )      ):
				_UpperCAmelCase						:				int	    =					"1" + smaller_sequence[i]
				sequence.append(__lowerCAmelCase      )

		return sequence


if __name__ == "__main__":
						import doctest

						doctest.testmod()







'''simple docstring'''


def        __lowerCAmelCase       (__lowerCAmelCase = 50      ):
		_UpperCAmelCase						:				Tuple	    =					[[0] * 3 for _ in range(length + 1      )]

		for row_length in range(length + 1      ):
				for tile_length in range(2					,       5      ):
						for tile_start in range(row_length - tile_length + 1      ):
								different_colour_ways_number[row_length][tile_length - 2] += (
								    different_colour_ways_number[row_length - tile_start - tile_length][
								        tile_length - 2
								    ]
								    + 1
								)

		return sum(different_colour_ways_number[length]      )


if __name__ == "__main__":
						print(F'''{solution() = }''')



