



import os
import sys
from contextlib import contextmanager


# Windows only
if os.name == "nt":
	import ctypes
	import msvcrt  # noqa

	class   _A   ( ctypes.Structure	):


							'''simple docstring'''





							_snake_case			:     Optional[Any]      							=      [("""size""", ctypes.c_int), ("""visible""", ctypes.c_byte)]



def    snake_case_				(    ):
	if os.name == "nt":
		__lowercase		       =			CursorInfo()
		__lowercase		       =			ctypes.windll.kernelaa.GetStdHandle(-1_1   )
		ctypes.windll.kernelaa.GetConsoleCursorInfo(_SCREAMING_SNAKE_CASE  ,	ctypes.byref(_SCREAMING_SNAKE_CASE   )   )
		__lowercase		       =			False
		ctypes.windll.kernelaa.SetConsoleCursorInfo(_SCREAMING_SNAKE_CASE  ,	ctypes.byref(_SCREAMING_SNAKE_CASE   )   )
	elif os.name == "posix":
		sys.stdout.write("\033[?25l"   )
		sys.stdout.flush()



def    snake_case_				(    ):
	if os.name == "nt":
		__lowercase		       =			CursorInfo()
		__lowercase		       =			ctypes.windll.kernelaa.GetStdHandle(-1_1   )
		ctypes.windll.kernelaa.GetConsoleCursorInfo(_SCREAMING_SNAKE_CASE  ,	ctypes.byref(_SCREAMING_SNAKE_CASE   )   )
		__lowercase		       =			True
		ctypes.windll.kernelaa.SetConsoleCursorInfo(_SCREAMING_SNAKE_CASE  ,	ctypes.byref(_SCREAMING_SNAKE_CASE   )   )
	elif os.name == "posix":
		sys.stdout.write("\033[?25h"   )
		sys.stdout.flush()



@contextmanager
def    snake_case_				(    ):
	try:
		hide_cursor()
		yield
	finally:
		show_cursor()








def    snake_case_				(    _SCREAMING_SNAKE_CASE   ):

	# 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
	__lowercase		       =			gray_code_sequence_string(_SCREAMING_SNAKE_CASE   )
	#
	# convert them to integers
	for i in range(len(_SCREAMING_SNAKE_CASE   )   ):
		__lowercase		       =			int(sequence[i]  ,	2   )

	return sequence



def    snake_case_				(    _SCREAMING_SNAKE_CASE   ):

	# 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"]

	__lowercase		       =			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
	__lowercase		       =			gray_code_sequence_string(bit_count - 1   )

	__lowercase		       =			[]

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

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

	return sequence


if __name__ == "__main__":
	import doctest

	doctest.testmod()



