


import argparse
import os
from io import BytesIO
from pathlib import Path

import requests
from clip_retrieval.clip_client import ClipClient
from PIL import Image
from tqdm import tqdm



def 			lowerCAmelCase (		lowerCAmelCase_ ,   lowerCAmelCase_ ,   lowerCAmelCase_ )-> str:
				lowerCAmelCase_ :      List[str]    				=				1.5
				lowerCAmelCase_ :      List[Any]    				=				int(factor * num_class_images )
				lowerCAmelCase_ :      Union[str, Any]    				=				ClipClient(
				    url='''https://knn.laion.ai/knn-service''' ,   indice_name='''laion_400m''' ,   num_images=lowerCAmelCase_ ,   aesthetic_weight=0.1 )

				os.makedirs(f"""{class_data_dir}/images""" ,   exist_ok=lowerCAmelCase_ )
				if len(list(Path(f"""{class_data_dir}/images""" ).iterdir() ) ) >= num_class_images:
								return

				while True:
								lowerCAmelCase_ :      Any    				=				client.query(text=lowerCAmelCase_ )
								if len(lowerCAmelCase_ ) >= factor * num_class_images or num_images > 1e4:
												break
								else:
												lowerCAmelCase_ :      str    				=				int(factor * num_images )
												lowerCAmelCase_ :      Tuple    				=				ClipClient(
												    url='''https://knn.laion.ai/knn-service''' ,   indice_name='''laion_400m''' ,   num_images=lowerCAmelCase_ ,   aesthetic_weight=0.1 ,   )

				lowerCAmelCase_ :      List[str]    				=				0
				lowerCAmelCase_ :      Dict    				=				0
				lowerCAmelCase_ :      Tuple    				=				tqdm(desc='''downloading real regularization images''' ,   total=lowerCAmelCase_ )

				with open(f"""{class_data_dir}/caption.txt""" ,   '''w''' ) as fa, open(f"""{class_data_dir}/urls.txt""" ,   '''w''' ) as fa, open(
				    f"""{class_data_dir}/images.txt""" ,   '''w''' ) as fa:
								while total < num_class_images:
												lowerCAmelCase_ :      Optional[Any]    				=				class_images[count]
												count += 1
												try:
																lowerCAmelCase_ :      Optional[Any]    				=				requests.get(images['''url'''] )
																if img.status_code == 200:
																				lowerCAmelCase_ :      Union[str, Any]    				=				Image.open(BytesIO(img.content ) )
																				with open(f"""{class_data_dir}/images/{total}.jpg""" ,   '''wb''' ) as f:
																								f.write(img.content )
																				fa.write(images['''caption'''] + '''\n''' )
																				fa.write(images['''url'''] + '''\n''' )
																				fa.write(f"""{class_data_dir}/images/{total}.jpg""" + '''\n''' )
																				total += 1
																				pbar.update(1 )
																else:
																				continue
												except Exception:
																continue
				return



def 			lowerCAmelCase (		)-> Union[str, Any]:
				lowerCAmelCase_ :      List[Any]    				=				argparse.ArgumentParser('''''' ,   add_help=lowerCAmelCase_ )
				parser.add_argument('''--class_prompt''' ,   help='''text prompt to retrieve images''' ,   required=lowerCAmelCase_ ,   type=lowerCAmelCase_ )
				parser.add_argument('''--class_data_dir''' ,   help='''path to save images''' ,   required=lowerCAmelCase_ ,   type=lowerCAmelCase_ )
				parser.add_argument('''--num_class_images''' ,   help='''number of images to download''' ,   default=200 ,   type=lowerCAmelCase_ )
				return parser.parse_args()


if __name__ == "__main__":
						_UpperCAmelCase			:  List[str]     =parse_args()
						retrieve(args.class_prompt, args.class_data_dir, args.num_class_images)



def 			lowerCAmelCase (		lowerCAmelCase_ = 1_000_000 )-> int:
				lowerCAmelCase_ :      Dict    				=				1
				lowerCAmelCase_ :      List[Any]    				=				1
				lowerCAmelCase_ :      Optional[Any]    				=				{1: 1}

				for inputa in range(2 ,   lowerCAmelCase_ ):
								lowerCAmelCase_ :      Tuple    				=				0
								lowerCAmelCase_ :      Dict    				=				inputa

								while True:
												if number in counters:
																counter += counters[number]
																break
												if number % 2 == 0:
																number //= 2
																counter += 1
												else:
																lowerCAmelCase_ :      Any    				=				(3 * number) + 1
																counter += 1

								if inputa not in counters:
												lowerCAmelCase_ :      Tuple    				=				counter

								if counter > pre_counter:
												lowerCAmelCase_ :      Optional[int]    				=				inputa
												lowerCAmelCase_ :      Union[str, Any]    				=				counter
				return largest_number


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