Problem:
Score : 200 points

Problem Statement

You are given a positive integer X.
Find the largest perfect power that is at most X.
Here, a perfect power is an integer that can be represented as b^p, where b is an integer not less than 1 and p is an integer not less than 2.

Constraints

1 ≤ X ≤ 1000

X is an integer.

Input

Input is given from Standard Input in the following format:

X

Output

Print the largest perfect power that is at most X.

Sample Input 1

10

Sample Output 1

9

There are four perfect powers that are at most 10: 1, 4, 8 and 9.
We should print the largest among them, 9.

Sample Input 2

1

Sample Output 2

1

Sample Input 3

999

Sample Output 3

961

Solution in C# (Mono 4.6.2.0) (judge verdict: Accepted)

//#pragma warning disable

//using System;
//using System.Collections.Generic;
//using System.IO;
//using System.Linq;
//using System.Runtime.Serialization.Formatters.Binary;
//using System.Text;
//using System.Text.RegularExpressions;
//using System.Diagnostics;
//using System.Numerics;
//using System.Collections;
//using System.Timers;
//using System.Threading;

//static class MainClass
//{
//    public static void Main(string[] args)
//    {
//        var s = Console.ReadLine();
//        var K = Console.ReadLine().ToInt32();
//    }


//    #region ライブラリ
//    public static long ToInt64(this string str) => long.Parse(str);
//    public static int ToInt32(this string str) => int.Parse(str);
//    public static BigInteger ToBigInteger(this string str) => BigInteger.Parse(str);
//    public static List<string> SplittedStringToList(this string str) => str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
//    public static List<int> SplittedStringToInt32List(this string str) => str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(x => int.Parse(x)).ToList();
//    public static List<BigInteger> SplittedStringToBigInteger(this string str) => str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(x => BigInteger.Parse(x)).ToList();
//    #endregion
//}


#pragma warning disable

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Text.RegularExpressions;
using System.Diagnostics;
using System.Numerics;
using System.Collections;
using System.Timers;
using System.Threading;

static class MainClass
{
    public static void Main(string[] args)
    {
        var X = Console.ReadLine().ToInt32();
        var ls = new List<int>();
        for (int i = 1; i * i <= 1000; i++)
        {
            ls.Add(i * i);
        }
        for (int i = 2; i <= 1000; i++)
        {
            ls.Add(i * i * i);
        }
        for (int i = 2; i <= 1000; i++)
        {
            ls.Add(i * i * i * i);
        }
        for (int i = 2; i <= 1000; i++)
        {
            ls.Add(i * i * i * i * i);
        }
        for (int i = 2; i <= 1000; i++)
        {
            ls.Add(i * i * i * i * i * i);
        }
        ls.AddRange(new int[]{ 128,256,512,1024 });
        Console.WriteLine(ls.Where(x => x <= X).Max());
        Console.ReadLine();
    }


    public static int Gcd(int a, int b)
    {
        if (b == 0)
            return a;
        return Gcd(b, a % b);
    }
    public static BigInteger Gcd(BigInteger a, BigInteger b)
    {
        if (b == 0)
            return a;
        return Gcd(b, a % b);
    }

    #region ライブラリ
    public static long ToInt64(this string str) => long.Parse(str);
    public static int ToInt32(this string str) => int.Parse(str);
    public static BigInteger ToBigInteger(this string str) => BigInteger.Parse(str);
    public static List<string> SplittedStringToList(this string str) => str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
    public static List<int> SplittedStringToInt32List(this string str) => str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(x => int.Parse(x)).ToList();
    public static List<BigInteger> SplittedStringToBigInteger(this string str) => str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(x => BigInteger.Parse(x)).ToList();
    #endregion
}