/*
    给出A,B ,求X,Y,使得 A = X + Y, B = X xor Y。要使得X最小,若不存在输出-1
    0<=A,B<2^64

    看了解题报告的,挺巧的,切入点是:“使得X最小”  -----------------OMG
    若(X,Y)是满足条件的一对数,则检查每一位
    若Xi = 1, Yi = 0 则可交换这两位,上面的等式还是成立,但是X减小了,Y增大了
    完成上面的操作后,(X,Y)的情况只能是(0,1),(0,0),(1,1)
    则有 Y - X = X xor Y = B                          -------------------OMG
    所以 X = (A-B)/2 , Y = (A+B)/2

    巧丫..
*/

#include
<iostream>
#include
<cstring>
#include
<map>
#include
<algorithm>
#include
<stack>
#include
<queue>
#include
<cmath>
#include
<string>
#include
<cstdlib>
#include
<vector>
#include
<cstdio>
#include
<set>
#include
<list>
#include
<numeric>
#include
<cassert>
#include
<ctime>
#include
<bitset>

using namespace std;


int main()
{
#ifndef ONLINE_JUDGE
    freopen(
"in","r",stdin);
#endif

    
for (unsigned long long A, B; cin>>A>>B; ) {
        
//A = X + Y, B = X ^ Y .  X is minimal
        
//swap(xi,yi) if xi = 1 and yi = 0,  the equalities above mantian.
        
//after all the swaping, we can find that
        
//(xi,yi) can only be (0,1) , (0,0), (1,1)
        
//so X ^ Y = Y - X = B
        if (((A&1^ (B&1)) || A < B) {
            cout 
<< -1 << endl;
        }
 else {
            cout 
<< (A-B)/2 <<" "<< (A+B)/2<<endl;
        }

    }

    
return 0;
}