





'''simple docstring'''

import random
import unittest

import numpy as np

from transformers.testing_utils import require_torch, require_vision
from transformers.utils import is_torch_available, is_vision_available

from ...test_image_processing_common import ImageProcessingSavingTestMixin, prepare_image_inputs


if is_torch_available():
			import torch

if is_vision_available():
			import PIL

			from transformers import FlavaImageProcessor
			from transformers.image_utils import PILImageResampling
			from transformers.models.flava.image_processing_flava import (
			    FLAVA_CODEBOOK_MEAN,
			    FLAVA_CODEBOOK_STD,
			    FLAVA_IMAGE_MEAN,
			    FLAVA_IMAGE_STD,
			)
else:
			lowerCAmelCase__      :   Any      	=			None


class      SCREAMING_SNAKE_CASE__      (   unittest.TestCase		):







					"""simple docstring"""






					def __init__(   self       :      List[str]		,	UpperCAmelCase_       :      List[str]		,	UpperCAmelCase_       :      Optional[int]=7		,	UpperCAmelCase_       :      Tuple=3		,	UpperCAmelCase_       :      Any=30		,	UpperCAmelCase_       :      List[Any]=400		,	UpperCAmelCase_       :      Optional[Any]=True		,	UpperCAmelCase_       :      Dict=None		,	UpperCAmelCase_       :      Union[str, Any]=True		,	UpperCAmelCase_       :      Union[str, Any]=None		,	UpperCAmelCase_       :      List[Any]=None		,	UpperCAmelCase_       :      str=True		,	UpperCAmelCase_       :      int=1 / 255		,	UpperCAmelCase_       :      str=True		,	UpperCAmelCase_       :      Union[str, Any]=FLAVA_IMAGE_MEAN		,	UpperCAmelCase_       :      Tuple=FLAVA_IMAGE_STD		,	UpperCAmelCase_       :      Union[str, Any]=14		,	UpperCAmelCase_       :      Tuple=75		,	UpperCAmelCase_       :      Any=None		,	UpperCAmelCase_       :      List[Any]=16		,	UpperCAmelCase_       :      str=0.3		,	UpperCAmelCase_       :      Dict=None		,	UpperCAmelCase_       :      List[Any]=True		,	UpperCAmelCase_       :      Optional[int]=None		,	UpperCAmelCase_       :      Dict=None		,	UpperCAmelCase_       :      Tuple=True		,	UpperCAmelCase_       :      Tuple=None		,	UpperCAmelCase_       :      List[Any]=True		,	UpperCAmelCase_       :      Optional[Any]=True		,	UpperCAmelCase_       :      Any=FLAVA_CODEBOOK_MEAN		,	UpperCAmelCase_       :      Union[str, Any]=FLAVA_CODEBOOK_STD		,	):







							"""simple docstring"""
							__UpperCAmelCase	:							List[Any]     =     size if size is not None else {"height": 224, "width": 224}
							__UpperCAmelCase	:							str     =     crop_size if crop_size is not None else {"height": 224, "width": 224}
							__UpperCAmelCase	:							Union[str, Any]     =     codebook_size if codebook_size is not None else {"height": 112, "width": 112}
							__UpperCAmelCase	:							List[str]     =     codebook_crop_size if codebook_crop_size is not None else {"height": 112, "width": 112}

							__UpperCAmelCase	:							int     =     parent
							__UpperCAmelCase	:							Union[str, Any]     =     batch_size
							__UpperCAmelCase	:							Any     =     num_channels
							__UpperCAmelCase	:							List[Any]     =     do_resize
							__UpperCAmelCase	:							List[Any]     =     do_rescale
							__UpperCAmelCase	:							Union[str, Any]     =     rescale_factor
							__UpperCAmelCase	:							Dict     =     min_resolution
							__UpperCAmelCase	:							Tuple     =     max_resolution
							__UpperCAmelCase	:							Tuple     =     size
							__UpperCAmelCase	:							List[Any]     =     resample if resample is not None else PILImageResampling.BICUBIC
							__UpperCAmelCase	:							Union[str, Any]     =     do_normalize
							__UpperCAmelCase	:							int     =     image_mean
							__UpperCAmelCase	:							List[Any]     =     image_std
							__UpperCAmelCase	:							Union[str, Any]     =     do_center_crop
							__UpperCAmelCase	:							Tuple     =     crop_size

							__UpperCAmelCase	:							Dict     =     input_size_patches
							__UpperCAmelCase	:							str     =     total_mask_patches
							__UpperCAmelCase	:							Tuple     =     mask_group_max_patches
							__UpperCAmelCase	:							Optional[int]     =     mask_group_min_patches
							__UpperCAmelCase	:							int     =     mask_group_min_aspect_ratio
							__UpperCAmelCase	:							int     =     mask_group_max_aspect_ratio

							__UpperCAmelCase	:							Optional[Any]     =     codebook_do_resize
							__UpperCAmelCase	:							Optional[Any]     =     codebook_size
							__UpperCAmelCase	:							Optional[Any]     =     codebook_resample if codebook_resample is not None else PILImageResampling.LANCZOS
							__UpperCAmelCase	:							Dict     =     codebook_do_center_crop
							__UpperCAmelCase	:							List[Any]     =     codebook_crop_size
							__UpperCAmelCase	:							Any     =     codebook_do_map_pixels
							__UpperCAmelCase	:							Union[str, Any]     =     codebook_do_normalize
							__UpperCAmelCase	:							str     =     codebook_image_mean
							__UpperCAmelCase	:							List[Any]     =     codebook_image_std
					def 		lowerCamelCase_   (   self       :      str		):







							"""simple docstring"""
							return {
							    "image_mean": self.image_mean,
							    "image_std": self.image_std,
							    "do_normalize": self.do_normalize,
							    "do_resize": self.do_resize,
							    "size": self.size,
							    "resample": self.resample,
							    "do_rescale": self.do_rescale,
							    "rescale_factor": self.rescale_factor,
							    "do_center_crop": self.do_center_crop,
							    "crop_size": self.crop_size,
							    "input_size_patches": self.input_size_patches,
							    "total_mask_patches": self.total_mask_patches,
							    "mask_group_max_patches": self.mask_group_max_patches,
							    "mask_group_min_patches": self.mask_group_min_patches,
							    "mask_group_min_aspect_ratio": self.mask_group_min_aspect_ratio,
							    "mask_group_max_aspect_ratio": self.mask_group_min_aspect_ratio,
							    "codebook_do_resize": self.codebook_do_resize,
							    "codebook_size": self.codebook_size,
							    "codebook_resample": self.codebook_resample,
							    "codebook_do_center_crop": self.codebook_do_center_crop,
							    "codebook_crop_size": self.codebook_crop_size,
							    "codebook_do_map_pixels": self.codebook_do_map_pixels,
							    "codebook_do_normalize": self.codebook_do_normalize,
							    "codebook_image_mean": self.codebook_image_mean,
							    "codebook_image_std": self.codebook_image_std,
							}
					def 		lowerCamelCase_   (   self       :      Dict		):







							"""simple docstring"""
							return (self.size["height"], self.size["width"])
					def 		lowerCamelCase_   (   self       :      Optional[int]		):







							"""simple docstring"""
							return (
							    (self.input_size_patches, self.input_size_patches)
							    if not isinstance(self.input_size_patches		,	UpperCAmelCase_		)
							    else self.input_size_patches
							)






					def 		lowerCamelCase_   (   self       :      str		):







							"""simple docstring"""
							return (self.codebook_size["height"], self.codebook_size["width"])






@require_torch
@require_vision
class      SCREAMING_SNAKE_CASE__      (   snake_case__							,unittest.TestCase		):







					"""simple docstring"""






					SCREAMING_SNAKE_CASE							=	FlavaImageProcessor if is_vision_available() else None
					SCREAMING_SNAKE_CASE							=	None
					def 		lowerCamelCase_   (   self       :      Optional[Any]		):







							"""simple docstring"""
							__UpperCAmelCase	:							List[str]     =     FlavaImageProcessingTester(self		)
					@property
					def 		lowerCamelCase_   (   self       :      Optional[Any]		):







							"""simple docstring"""
							return self.image_processor_tester.prepare_image_processor_dict()
					def 		lowerCamelCase_   (   self       :      str		):







							"""simple docstring"""
							__UpperCAmelCase	:							Dict     =     self.image_processing_class(**self.image_processor_dict		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"image_mean"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"image_std"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"do_normalize"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"do_resize"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"resample"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"crop_size"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"do_center_crop"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"do_rescale"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"rescale_factor"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"masking_generator"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"codebook_do_resize"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"codebook_size"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"codebook_resample"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"codebook_do_center_crop"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"codebook_crop_size"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"codebook_do_map_pixels"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"codebook_do_normalize"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"codebook_image_mean"		)		)
							self.assertTrue(hasattr(UpperCAmelCase_		,	"codebook_image_std"		)		)
					def 		lowerCamelCase_   (   self       :      Optional[Any]		):







							"""simple docstring"""
							__UpperCAmelCase	:							Union[str, Any]     =     self.image_processing_class.from_dict(self.image_processor_dict		)
							self.assertEqual(image_processor.size		,	{"height": 224, "width": 224}		)
							self.assertEqual(image_processor.crop_size		,	{"height": 224, "width": 224}		)
							self.assertEqual(image_processor.codebook_size		,	{"height": 112, "width": 112}		)
							self.assertEqual(image_processor.codebook_crop_size		,	{"height": 112, "width": 112}		)

							__UpperCAmelCase	:							Optional[int]     =     self.image_processing_class.from_dict(
							    self.image_processor_dict		,	size=42		,	crop_size=84		,	codebook_size=33		,	codebook_crop_size=66		)
							self.assertEqual(image_processor.size		,	{"height": 42, "width": 42}		)
							self.assertEqual(image_processor.crop_size		,	{"height": 84, "width": 84}		)
							self.assertEqual(image_processor.codebook_size		,	{"height": 33, "width": 33}		)
							self.assertEqual(image_processor.codebook_crop_size		,	{"height": 66, "width": 66}		)
					def 		lowerCamelCase_   (   self       :      Union[str, Any]		):







							"""simple docstring"""
							pass
					def 		lowerCamelCase_   (   self       :      Optional[Any]		):







							"""simple docstring"""
							# Initialize image_processing
							__UpperCAmelCase	:							Dict     =     self.image_processing_class(**self.image_processor_dict		)
							# create random PIL images
							__UpperCAmelCase	:							Tuple     =     prepare_image_inputs(self.image_processor_tester		,	equal_resolution=UpperCAmelCase_		)
							for image in image_inputs:
									self.assertIsInstance(UpperCAmelCase_		,	PIL.Image.Image		)

							# Test not batched input
							__UpperCAmelCase	:							Optional[int]     =     image_processing(image_inputs[0]		,	return_tensors="pt"		)

							# Test no bool masked pos
							self.assertFalse("bool_masked_pos" in encoded_images		)

							__UpperCAmelCase  ,			__UpperCAmelCase	:							List[Any]     =     self.image_processor_tester.get_expected_image_size()

							self.assertEqual(
							    encoded_images.pixel_values.shape		,	(1, self.image_processor_tester.num_channels, expected_height, expected_width)		,	)

							# Test batched
							__UpperCAmelCase	:							str     =     image_processing(UpperCAmelCase_		,	return_tensors="pt"		)
							__UpperCAmelCase  ,			__UpperCAmelCase	:							Optional[Any]     =     self.image_processor_tester.get_expected_image_size()

							# Test no bool masked pos
							self.assertFalse("bool_masked_pos" in encoded_images		)

							self.assertEqual(
							    encoded_images.pixel_values.shape		,	(
							        self.image_processor_tester.batch_size,
							        self.image_processor_tester.num_channels,
							        expected_height,
							        expected_width,
							    )		,	)
					def 		lowerCamelCase_   (   self       :      Optional[int]		,	UpperCAmelCase_       :      int		,	UpperCAmelCase_       :      Optional[Any]		):







							"""simple docstring"""
							# Initialize image_processing
							__UpperCAmelCase	:							Any     =     self.image_processing_class(**self.image_processor_dict		)
							# create random tensors
							__UpperCAmelCase	:							Dict     =     prepare_image_inputs(self.image_processor_tester		,	equal_resolution=UpperCAmelCase_		,	**UpperCAmelCase_		)
							for image in image_inputs:
									self.assertIsInstance(UpperCAmelCase_		,	UpperCAmelCase_		)

							# Test not batched input
							__UpperCAmelCase	:							Union[str, Any]     =     image_processing(image_inputs[0]		,	return_tensors="pt"		)

							__UpperCAmelCase  ,			__UpperCAmelCase	:							Optional[Any]     =     self.image_processor_tester.get_expected_image_size()
							self.assertEqual(
							    encoded_images.pixel_values.shape		,	(1, self.image_processor_tester.num_channels, expected_height, expected_width)		,	)

							__UpperCAmelCase	:							str     =     image_processing(UpperCAmelCase_		,	return_image_mask=UpperCAmelCase_		,	return_tensors="pt"		)

							__UpperCAmelCase  ,			__UpperCAmelCase	:							List[Any]     =     self.image_processor_tester.get_expected_image_size()
							self.assertEqual(
							    encoded_images.pixel_values.shape		,	(
							        self.image_processor_tester.batch_size,
							        self.image_processor_tester.num_channels,
							        expected_height,
							        expected_width,
							    )		,	)

							__UpperCAmelCase  ,			__UpperCAmelCase	:							Union[str, Any]     =     self.image_processor_tester.get_expected_mask_size()
							self.assertEqual(
							    encoded_images.bool_masked_pos.shape		,	(
							        self.image_processor_tester.batch_size,
							        expected_height,
							        expected_width,
							    )		,	)

							# Test batched
							__UpperCAmelCase	:							Tuple     =     image_processing(UpperCAmelCase_		,	return_tensors="pt"		).pixel_values

							__UpperCAmelCase  ,			__UpperCAmelCase	:							Any     =     self.image_processor_tester.get_expected_image_size()
							self.assertEqual(
							    encoded_images.shape		,	(
							        self.image_processor_tester.batch_size,
							        self.image_processor_tester.num_channels,
							        expected_height,
							        expected_width,
							    )		,	)

							# Test masking
							__UpperCAmelCase	:							Any     =     image_processing(UpperCAmelCase_		,	return_image_mask=UpperCAmelCase_		,	return_tensors="pt"		)

							__UpperCAmelCase  ,			__UpperCAmelCase	:							Any     =     self.image_processor_tester.get_expected_image_size()
							self.assertEqual(
							    encoded_images.pixel_values.shape		,	(
							        self.image_processor_tester.batch_size,
							        self.image_processor_tester.num_channels,
							        expected_height,
							        expected_width,
							    )		,	)

							__UpperCAmelCase  ,			__UpperCAmelCase	:							Union[str, Any]     =     self.image_processor_tester.get_expected_mask_size()
							self.assertEqual(
							    encoded_images.bool_masked_pos.shape		,	(
							        self.image_processor_tester.batch_size,
							        expected_height,
							        expected_width,
							    )		,	)
					def 		lowerCamelCase_   (   self       :      Any		):







							"""simple docstring"""
							self._test_call_framework(np.ndarray		,	prepare_kwargs={"numpify": True}		)
					def 		lowerCamelCase_   (   self       :      Any		):







							"""simple docstring"""
							self._test_call_framework(torch.Tensor		,	prepare_kwargs={"torchify": True}		)
					def 		lowerCamelCase_   (   self       :      Tuple		):







							"""simple docstring"""
							# Initialize image_processing
							random.seed(1_234		)
							__UpperCAmelCase	:							Dict     =     self.image_processing_class(**self.image_processor_dict		)
							__UpperCAmelCase	:							Dict     =     prepare_image_inputs(self.image_processor_tester		,	equal_resolution=UpperCAmelCase_		,	torchify=UpperCAmelCase_		)

							# Test not batched input
							__UpperCAmelCase	:							Optional[Any]     =     image_processing(image_inputs[0]		,	return_image_mask=UpperCAmelCase_		,	return_tensors="pt"		)
							self.assertEqual(encoded_images.bool_masked_pos.sum().item()		,	75		)






					def 		lowerCamelCase_   (   self       :      Union[str, Any]		):







							"""simple docstring"""
							# Initialize image_processing
							__UpperCAmelCase	:							List[Any]     =     self.image_processing_class(**self.image_processor_dict		)
							# create random PIL images
							__UpperCAmelCase	:							Dict     =     prepare_image_inputs(self.image_processor_tester		,	equal_resolution=UpperCAmelCase_		)
							for image in image_inputs:
									self.assertIsInstance(UpperCAmelCase_		,	PIL.Image.Image		)

							# Test not batched input
							__UpperCAmelCase	:							List[str]     =     image_processing(image_inputs[0]		,	return_codebook_pixels=UpperCAmelCase_		,	return_tensors="pt"		)
							__UpperCAmelCase  ,			__UpperCAmelCase	:							List[Any]     =     self.image_processor_tester.get_expected_codebook_image_size()
							self.assertEqual(
							    encoded_images.codebook_pixel_values.shape		,	(1, self.image_processor_tester.num_channels, expected_height, expected_width)		,	)

							# Test batched
							__UpperCAmelCase	:							Tuple     =     image_processing(UpperCAmelCase_		,	return_codebook_pixels=UpperCAmelCase_		,	return_tensors="pt"		)
							__UpperCAmelCase  ,			__UpperCAmelCase	:							Tuple     =     self.image_processor_tester.get_expected_codebook_image_size()
							self.assertEqual(
							    encoded_images.codebook_pixel_values.shape		,	(
							        self.image_processor_tester.batch_size,
							        self.image_processor_tester.num_channels,
							        expected_height,
							        expected_width,
							    )		,	)











'''simple docstring'''

from __future__ import annotations

lowerCAmelCase__      :   Tuple      	=			{1: 1}


def 						__UpperCamelCase						(			_UpperCAmelCase  ):
		if n in COLLATZ_SEQUENCE_LENGTHS:
				return COLLATZ_SEQUENCE_LENGTHS[n]
		__UpperCAmelCase	:							int     =     n // 2 if n % 2 == 0 else 3 * n + 1
		__UpperCAmelCase	:							str     =     collatz_sequence_length(_UpperCAmelCase  ) + 1
		__UpperCAmelCase	:							Union[str, Any]     =     sequence_length
		return sequence_length


def 						__UpperCamelCase						(			_UpperCAmelCase = 1000000  ):
		__UpperCAmelCase	:							Union[str, Any]     =     max((collatz_sequence_length(_UpperCAmelCase  ), i) for i in range(1,       _UpperCAmelCase  )  )
		return result[1]


if __name__ == "__main__":
			print(solution(int(input().strip())))




