Problem:
Score : 300 points

Problem Statement

Find the price of a product before tax such that, when the consumption tax rate is 8 percent and 10 percent, the amount of consumption tax levied on it is A yen and B yen, respectively. (Yen is the currency of Japan.)

Here, the price before tax must be a positive integer, and the amount of consumption tax is rounded down to the nearest integer.

If multiple prices satisfy the condition, print the lowest such price; if no price satisfies the condition, print -1.

Constraints

1 \leq A \leq B \leq 100

A and B are integers.

Input

Input is given from Standard Input in the following format:

A B

Output

If there is a price that satisfies the condition, print an integer representing the lowest such price; otherwise, print -1.

Sample Input 1

2 2

Sample Output 1

25

If the price of a product before tax is 25 yen, the amount of consumption tax levied on it is:

When the consumption tax rate is 8 percent: \lfloor 25 \times 0.08 \rfloor = \lfloor 2 \rfloor = 2 yen.

When the consumption tax rate is 10 percent: \lfloor 25 \times 0.1 \rfloor = \lfloor 2.5 \rfloor = 2 yen.

Thus, the price of 25 yen satisfies the condition. There are other possible prices, such as 26 yen, but print the minimum such price, 25.

Sample Input 2

8 10

Sample Output 2

100

If the price of a product before tax is 100 yen, the amount of consumption tax levied on it is:

When the consumption tax rate is 8 percent: \lfloor 100 \times 0.08 \rfloor = 8 yen.

When the consumption tax rate is 10 percent: \lfloor 100 \times 0.1 \rfloor = 10 yen.

Sample Input 3

19 99

Sample Output 3

-1

There is no price before tax satisfying this condition, so print -1.

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

            #include <bits/stdc++.h>
            using namespace std;
            #define rep(i,a,b) for(ll i =a; i<b;++i)
            #define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
            #define endl "\n"
            #define pb push_back
            #define F first
            #define S second
            #define print(a)       for(auto x : a) cout << x << " "; cout << endl
            #define print1(a)      for(auto x : a) cout << x.F << " " << x.S << endl
            #define print2(a,x,y)  for(int i = x; i < y; i++) cout<< a[i]<< " "; cout << endl
            #define mk(x,y)  make_pair(x,y)
            #define dr 0.0000004
            typedef  long long  int ll;
            const int N = ( 1e6 + 5 );
            const int mod = 1e9+7;
            ll n,a , b;
    ll pow_mod_m(ll a , ll n)
    {
        if(!n)
            return 1;
        ll pt =  pow_mod_m(a,n/2);
        pt *= pt ; pt %= mod;
        if(n&1)
            pt *= a , pt %= mod;
        return pt;
    }

    struct LCA
    {
        vector <int> height , euler , first , segtree;
        vector <bool > visited;
        int n;
        LCA(vector <vector<int>> &adj , int root  = 0)
        {
            n = adj.size();
            height.resize(n);
            first.resize(n);
            euler.reserve(2*n);
            visited.assign(n,false);
            dfs(adj,root);
            int m = euler.size();
            segtree.resize(4*m);
            build(1 , 0 , m-1);
        }
        void dfs(vector < vector <int>> &adj , int node , int h = 0)
        {
            visited[node]  = 1;
            height[node]  =h;
            first[node] = euler.size();
            euler.pb(node);
            for(auto to : adj[node])
            {
                if(!visited[to]){
                     dfs(adj ,to , h+1);
                     euler.pb(node);
                }
            }
        }
        void build(int node ,int b ,int e)
        {
            if(b == e)
                segtree[node]  = euler[b];
            else
            {
                int m = (b+e)>>1;
                build(node <<1 ,b ,m);
                build(node <<1 | 1 , m+1 , e);
                int l  =segtree[node <<1] ,r = segtree[node <<1 | 1 ] ;
                segtree[node] = ( height[l] < height[r] ) ? l  : r;
            }
        }

    int query(int node , int b , int e,int L ,int R)
    {
        if( b > R  || e<L)
            return -1;
        if( b >= L and e <= R )
            return segtree[node];
        int mid = ( b + e ) >> 1;
        int left  = query(node <<1 , b , mid , L ,R);
        int right = query(node <<1 |1 , mid+1,e, L,R);
        if(left == -1) return right;
        if(right == -1) return left;
        return (height[left] < height[right]) ? left : right ;
    }

    int lca(int u,int v)
    {
        int left = first[u] , right = first[v];
        if(left > right) swap(left,right);
        return query( 1 , 0 , euler.size() -1 ,left ,right) ;
    }
    };

    vector<ll> solve(vector <ll> &v)
    {
        vector <ll> res(v.size()+1);
        int i = 0;
        while(i < v.size())
        {
            if(v[i] == 0)
            {
                i++;
                continue;
            }
            int j = i;
            while( v[j] == 1 and  j < v.size())
            {
                j++;
            }
            for( int len = 1; len <= j-i; len++)
            {
                res[len] += j- i- len +1;
            }
            i = j;
        }
      //  print(res);
        return res;
    }

    int main()
    {
         IOS;
    //     freopen("a_example (2).txt","r",stdin);
      //   freopen("c.txt","w",stdout);
        int ts =1;
      //  cin>>ts;
        while( ts-- )
        {
            cin  >> a >> b ;
            ll min8 = (a*25+1) >>1 ;
            ll max8 = ((a+1)*25 + 1) >>1 -1 ;
            ll min10 = b*10;
            ll max10 = (b+1)*10 - 1;
            if ( max8 < min10 or max10 < min8) cout << -1 << endl;
            else cout << max(min8,min10);
        }
        return 0;
    }