/*
TASK: PHROPE
LANG: C++
*/

#include <stdio.h>
/*
const int LOSS = -((1<<30)+643);
const int MAX = 100;

int A[MAX][MAX];
int lamp;

int solve (int a, int b)
{
   if (A[a][b]) return A[a][b];
   if ((a<=1 && b<=1)||(a*b==0)) return (A[a][b]=LOSS);

   int i;
   
   for (i=1; (i<=a/2)&&(i<=b); i++)
      if (solve(a-i*2, b-i) == LOSS) {
         lamp = 0;
         return (A[a][b]=i);
      }

   for (i=1; (i<=b/2)&&(i<=a); i++)
      if (solve(a-i, b-2*i) == LOSS) {
         lamp = 1;
         return (A[a][b]=i);
      }

   return (A[a][b]=LOSS);
}
*/
void print (int q1, int q2, int lamp)
{
   if (lamp) { int x=q1; q1=q2; q2=x; }
   printf ("%d %d\n", q1, q2);
}

int main ()
{
/*   freopen ("out.txt", "w", stdout);

   int p, i, j;

//   scanf ("%d%d", &i, &j);

   for (i=1; i<=50; i++) {
      for (j=1; j<=50; j++) {
         printf ("%d %d -> ", i, j);
         p = solve (i,j);
         if (p==LOSS) printf ("0 0\n");
         else {
            if (lamp) printf ("%d %d\n", p, 2*p);
            else printf ("%d %d\n", 2*p, p);
         }
      }
      printf ("\n");
   }
*/
   int i, j, lamp=0;

   scanf ("%d%d", &i, &j);
   if (i>j) { int x=i; i=j; j=x; lamp=1; }

   if (i==j && i%2) { print(0,0,lamp); return 0; }
   if (i*2<=j) { print(i,i*2,lamp); return 0; }
   if (i%2 == 0) { print(i,i/2,lamp); return 0; }
   if (i%2) {
      if (j%2) print(j-i,2*(j-i),lamp);
      else if (j%2 == 0) print(j/2,j,lamp);
   }

   return 0;
}
