

import os
from pathlib import Path

def  lowerCamelCase__ (					):
	from torch.utils.cpp_extension import load

	SCREAMING_SNAKE_CASE   :      Optional[int]				     =       Path(_a).resolve().parent.parent.parent / "kernels" / "deformable_detr"
	SCREAMING_SNAKE_CASE   :      Tuple				     =       [
	    root / filename
	    for filename in [
	        "vision.cpp",
	        os.path.join("cpu"							,			"ms_deform_attn_cpu.cpp"),
	        os.path.join("cuda"							,			"ms_deform_attn_cuda.cu"),
	    ]
	]

	load(
	    "MultiScaleDeformableAttention"							,			_a							,			with_cuda=_a							,			extra_include_paths=[str(_a)]							,			extra_cflags=["-DWITH_CUDA=1"]							,			extra_cuda_cflags=[
	        "-DCUDA_HAS_FP16=1",
	        "-D__CUDA_NO_HALF_OPERATORS__",
	        "-D__CUDA_NO_HALF_CONVERSIONS__",
	        "-D__CUDA_NO_HALF2_OPERATORS__",
	    ]							,			)

	import MultiScaleDeformableAttention as MSDA

	return MSDA


def  lowerCamelCase__ (					_a = 50):
	SCREAMING_SNAKE_CASE   :      int				     =       [1] * (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):
				ways_number[row_length] += ways_number[
				    row_length - tile_start - tile_length
				]

	return ways_number[length]


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