Problem:
Score: 200 points

Problem Statement

Takahashi bought a piece of apple pie at ABC Confiserie. According to his memory, he paid N yen (the currency of Japan) for it.

The consumption tax rate for foods in this shop is 8 percent. That is, to buy an apple pie priced at X yen before tax, you have to pay X \times 1.08 yen (rounded down to the nearest integer).

Takahashi forgot the price of his apple pie before tax, X, and wants to know it again. Write a program that takes N as input and finds X. We assume X is an integer.

If there are multiple possible values for X, find any one of them. Also, Takahashi's memory of N, the amount he paid, may be incorrect. If no value could be X, report that fact.

Constraints

1 \leq N \leq 50000

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

If there are values that could be X, the price of the apple pie before tax, print any one of them.

If there are multiple such values, printing any one of them will be accepted.

If no value could be X, print :(.

Sample Input 1

432

Sample Output 1

400

If the apple pie is priced at 400 yen before tax, you have to pay 400 \times 1.08 = 432 yen to buy one.

Otherwise, the amount you have to pay will not be 432 yen.

Sample Input 2

1079

Sample Output 2

:(

There is no possible price before tax for which you have to pay 1079 yen with tax.

Sample Input 3

1001

Sample Output 3

927

If the apple pie is priced 927 yen before tax, by rounding down 927 \times 1.08 = 1001.16, you have to pay 1001 yen.

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)

// Java program For handling Input/Output 
import java.io.*; 
import java.util.*;
import java.math.*;
//import java.awt.*;

public class Main 
{ 
    Scanner sc;
        //actual logic
    void solve(){
        int n = ni();
        int d = (int)(n / 1.08);
        int e = d+1;
        if((int)(d * 1.08) == n)
        {
            System.out.println(d);
        }
        else if((int)(e * 1.08) == n)
            System.out.println(e);
        else
            System.out.println(":(");
    }

    //constructor
    Main(){
        try{  
            sc = new Scanner(System.in);
        }catch(Exception e){
            System.out.println(e);
        }
    }


    //main metohd
    public static void main(String[] args) 
    { 
       new Main().solve();
   }


    //Utility methods
        //input an integer from scanner
   int ni()
   {
    int a = sc.nextInt();
    return a;
}
        //input a long from scanner
long nl()
{
    return sc.nextLong();
}
        //input a float from scanner
float nf(){
    float a = sc.nextFloat();
    return a;
}
        //input a double from scanner
double nd(){
    double a = sc.nextDouble();
    return a;
}
        //input a sentence from scanner
String ns(){
    return sc.nextLine();
}
        //converts a string to stringtokenizer
StringTokenizer nst(String s){
    return new StringTokenizer(s);
}
        //input an intger array
void ia(int a[]){
    for(int i = 0;i < a.length;i++)
        a[i] = sc.nextInt();
}
        //
void la(long a[]){
    for(int i = 0;i < a.length;i++)
        a[i] = sc.nextLong();
}
        //input a float array
void fa(float a[]){
    for(int i = 0;i < a.length;i++)
        a[i] = sc.nextFloat();
}
        //input a double array
void da(double a[]){
    for(int i = 0;i < a.length;i++)
        a[i] = sc.nextDouble();
}
        //input a string array either with all empty input or from scanner
void sa(String a[], boolean empty){
    if(empty)
    {
        for(int i = 0;i < a.length;i++)
        {
            a[i] = "";
        }
    }
    else
    {
        for(int i = 0;i < a.length;i++)
        {
            a[i] = ns();
        }
    }
}
        //input two dimensional integer array
void ida(int a[][], int n, int m)
{
    for(int i = 0;i < n;i++)
    {
        for(int j = 0;j < m;j++)
        {
            a[i][j] = ni();
        }
    }
}
        //input two dimentional long array
void lda(long a[][], int n, int m)
{
    for(int i = 0;i < n;i++)
    {
        for(int j = 0;j < m;j++)
        {
            a[i][j] = nl();
        }
    }
}
        //input two dimensional double array
void dda(double a[][], int n, int m)
{
    for(int i = 0;i < n;i++)
    {
        for(int j = 0;j < m;j++)
        {
            a[i][j] = nd();
        }
    }
}
        //convert string to integer
int stoi(String s){
    return Integer.parseInt(s);
}
        //convert string to double
double stod(String s){
    return Double.parseDouble(s);
}
        //find minimum in a long array
long lmin(long a[])
{
    long min = Long.MAX_VALUE;
    for(int i = 0;i < a.length;i++)
    {
        if(min > a[i])
            min = a[i];
    }
    return min;
}
        //find minimum in a integer array
int imin(int a[])
{
    int min = Integer.MAX_VALUE;
    for(int i = 0;i < a.length;i++)
    {
        if(min > a[i])
            min = a[i];
    }
    return min;
}
        //find maximum in a long array
long lmax(long a[])
{
    long max = Long.MIN_VALUE;
    for(int i = 0;i < a.length;i++)
    {
        if(max < a[i])
            max = a[i];
    }
    return max;
}
        //find maximum in an integer array
int imax(int a[])
{
    int max = Integer.MIN_VALUE;
    for(int i = 0;i < a.length;i++)
    {
        if(max < a[i])
            max = a[i];
    }
    return max;
}
        //check whether an element is present in an integer array by binary search
boolean ibs(int a[], int toFind)
{
    Arrays.sort(a);
    int min = 0;
    int max = a.length-1;
    boolean found = false;

    while(min <= max && !found)
    {
        int mid = min + (max-min)/2;
        if(a[mid] == toFind)
        {
         found = true;
     }
     else if(toFind > a[mid])
     {
        min = mid+1;
    }
    else
    {
        max = mid-1;
    }

}
return found;
}
        //check whether an element is present in a long array
boolean lbs(long a[], long toFind)
{
    Arrays.sort(a);
    int min = 0;
    int max = a.length-1;
    boolean found = false;

    while(min <= max && !found)
    {
        int mid = min + (max-min)/2;
        if(a[mid] == toFind)
        {
         found = true;
     }
     else if(toFind > a[mid])
     {
        min = mid+1;
    }
    else
    {
        max = mid-1;
    }

}
return found;
}

int stb(String s)
{
    int sum = 0;
    int k = 0;
    for(int i = s.length()-1;i >= 0;i--)
    {
        sum += stoi(s.charAt(i)+"") * Math.pow(2, k++);
    }
    return sum;
}

}