#include <iostream>
#include <cmath>
#include <vector>
#include <cstdint>
#include <string>
#include <algorithm>

std::uint64_t F(std::uint32_t N){
	std::uint64_t R = N;
	if (N == 0) return 0;
	for (std::uint32_t i = N - 1; i >= 1; i--) R *= i;

	return R;
}



int main(){
	std::vector<std::pair<double,std::string>> vec;
	int N = 10;
	vec.push_back(std::make_pair(std::pow(2,N),"2^n"));
	vec.push_back(std::make_pair(std::pow(2,std::log(N)),"2^log(n)"));
	vec.push_back(std::make_pair(std::pow(4,N),"4^n"));
	vec.push_back(std::make_pair(N,"n"));
	vec.push_back(std::make_pair(std::pow(N,2),"n^2"));
	vec.push_back(std::make_pair((double)F(N),"n!"));
	vec.push_back(std::make_pair(N*std::log(N),"n*log(n)"));
	vec.push_back(std::make_pair(std::log((double)F(N)),"log(n!)"));
	vec.push_back(std::make_pair(std::log(std::log(N)),"log(log(n))"));
	vec.push_back(std::make_pair(std::sqrt(std::log(N)),"sqrt(log(n))"));

	std::sort(vec.rbegin(), vec.rend());

	for (auto& o : vec)std::cout << o.second << ":" << o.first << std::endl;


	return 0;
}