#include <iostream>
#include <cmath>
#include <limits>
#include <string>
using namespace std;
 
/*******************************************
 *Задача про максимальную величину типа int*
 *(Программа не сцепленная с разрядностью) *
 *******************************************/
 
template <class T> T findmax()
{
	T r1=1;        	  // именно на этой переменной мы будем использовать побитовое смещение
	T k=1;			  // правильный ответ; Мы знаем что положительных чисел на 1 меньше чем отрицательных, так как одно значение знаимает нуль
	T r=1;			  // это то самое число которое будет испытывать на себе поянную ануляцию, что и позволит нам выявиль границы типа
	while(   ( numeric_limits<T>::infinity() ? k*2 < numeric_limits<T>::infinity() : ((T)(k+1))>0 )  )		  //елси это число имеет верхнюю границу, то удвенное k должно быть меньше чем этот предел(ибо k+1 будет давать нам вполне сносное значение(что для нас не приемлимо), поэтому я просто умножил на два чтобы наверняка), иначе:  если при прибавлении единицы мы переходим границу возможных положительных чисел, то оно уж точно не будет больш нуля
	{
		r=k;			 // пустышку r мы снова приравниваем k
		r1=1;			   // подготавливаем все к новому возведению в степень
		for (;( numeric_limits<T>::infinity() ? (r<numeric_limits<T>::infinity()) : r >= k ) ;)  	   //елси это число имеет верхнюю границу, то r должно быть меньше чем этот преде иначе: Выполняется пока число не переполнится и не станет меньше тени(k)
		{
			if( r>0 ) k=r;// первое присваивание мы пропускаем(не очень то и важно)
			r += r1;      // постоянно прибавляем степени
			/*этот код дает такой эффект: вначале мы просто повышаем степень, а потом мы уже прибавляем к наивысшему числу которое нашла эта  проверка  степени */
			/*то есть после первого возведения в степень типа int мы получим: 2^30, а потом к 2^30  прибавляется поочередно +1, +2, +4; если и так постоянно будет начинать заново, и в конце к переменной будет прибавляться +1 и +3, тем самым заполняя оставшееся место до максимального числа в ислучае int это 2^31-1*/
			r1*=2;
			
		}			
	}
	return k;
}



int main(void)
{
string  c;
cin >> c; 
if(c == "char")cout << "Char=" << (int)findmax<char>() << endl;
else if(c == "unsigned char")cout << "uChar=" << (int)findmax<unsigned char>() << endl;
else if(c == "short")cout << "Short="<< findmax<short>() << endl;
else if(c == "unsigned short")cout << "uShort=" << findmax<unsigned short>() << endl;
else if(c == "int")cout << "Int=" << findmax<int>() << endl;
else if(c == "unsigned int")cout << "uInt=" << findmax<unsigned int>() << endl;
else if(c == "long")cout << "Long=" << findmax<long>() << endl;
else if(c == "unsigned long")cout << "uLong=" << findmax<unsigned long>() << endl;
else if(c == "long long")cout << "Long long int=" << findmax<long long int>() << endl;
else if(c == "unsigned long long")cout << "uLong long=" << findmax<unsigned long long int>() << endl;
else if(c == "float")cout << "Float=" << (float)(findmax<float>()) << endl;
else if(c == "double")cout << "Double=" << findmax<double>() << endl;
else if(c == "long double")cout << "Long Double=" << findmax<long double>() << endl;
else cout << "Нет такого типа" << endl;

return 0;
}
