//#include<stdio.h>
//int main()
//{
// int t, k[3000001] = {}, i;
// unsigned long long int arr[3000001] = {};
// scanf("%d", &t);
// for(i=0;i<t;i++)
// {
// scanf("%llu",&arr[i]);
// }
// for(i=0;i<t;i++)
// {
// if((arr[i]&(arr[i]-1))==0)
// {
// if(arr[i] != 0)
// {
// k[i]++;
// }
// }
// }
// for(i=0;i<t;i++)
// {
// printf("%d ",k[i]);
// }
//}
//#include <stdio.h>
//int main()
//{
// char number[9][4] = { "일", "이", "삼", "사", "오", "육", "칠", "팔", "구" };
// char string[10][4] = { "", "십", "백", "천", "만", "십", "백", "천", "억", "십" };
// char arr[11];
// int cnt = 0;
// int tmp = 0;
// int i;
// scanf("%s", arr);
// for (i = 0; i < strlen(arr); i++)
// {
// if (arr[i] == '0')
// {
// if (strlen(arr) - i - 1 == 8)
// {
// if (cnt != 0)
// {
// printf("억");
// }
// cnt = 0;
// }
// else if(strlen(arr) - i - 1 == 4)
// {
// if (cnt != 0)
// {
// printf("만");
// }
// cnt = 0;
// }
// else if(strlen(arr) == 1)
// {
// printf("영");
// }
// continue;
// }
// tmp = (int)arr[i] - 48;
// cnt = (cnt * 10) + tmp;
// if (i == strlen(arr) - 1)
// {
// printf("%s", number[tmp - 1]);
// }
// else
// {
// printf("%s%s", number[tmp - 1], string[strlen(arr) - i - 1]);
// if (strlen(arr) - i - 1 == 8)
// {
// cnt = 0;
// }
// else if (strlen(arr) - i - 1 == 4)
// {
// cnt = 0;
// }
// }
// }
//}
//#include <stdio.h>
//#include <math.h>
//int main()
//{
// int n, data[100000][2] = {}, i, j;
// double min_dist = TMP_MAX;
// scanf("%d", &n);
// for (i = 0; i < n; i++)
// {
// scanf("%d %d", &data[i][0], &data[i][1]);
// }
// for (i = 0; i < n; i++)
// {
// for (j = i + 1; j < n; j++)
// {
// double dist = sqrt(pow(data[i][0] - data[j][0], 2) + pow(data[i][1] - data[j][1], 2));
// if (dist < min_dist)
// {
// min_dist = dist;
// }
// }
// }
// printf("%.1f", min_dist);
// return 0;
//}
//#include<stdio.h>
//#include<string.h>
//#define max(x,y) (x) > (y) ? (x) : (y)
//int dp[101][100001] = {};
//int travel[101][3] = {};
//int main()
//{
// int k,N,K,i;
// scanf("%d %d",&N,&K);
// for(i=0;i<N;i++)
// {
// scanf("%d %d %d %d",&travel[i][0],&travel[i][1],&travel[i][2],&travel[i][3]);
// }
// int ans = 0;
// dp[0][travel[0][0]] = travel[0][1];
// dp[0][travel[0][2]] = travel[0][3];
// for (i = 1; i < N*3; ++i)
// {
// for (k = 0; k < K; ++k)
// {
// if (dp[i-1][k] == 0)
// {
// continue;
// }
// if (travel[i][0] + k <= K)
// {
// dp[i][travel[i][0]+k] = max(dp[i][travel[i][0]+k], dp[i-1][k] + travel[i][1]);
// ans = max(ans, dp[i][travel[i][0]+k]);
// }
// if (travel[i][2] + k <= K)
// {
// dp[i][travel[i][2]+k] = max(dp[i][travel[i][2]+k], dp[i-1][k] + travel[i][3]);
// ans = max(ans, dp[i][travel[i][2]+k]);
// }
// printf("%d\n",ans);
// }
// }
// printf("%d",ans);
//}
//#include <stdio.h>
//int f(int num)
//{
// int cnt = 0;
// int tmp = 0;
// if (num == 1)
// {
// return 1;
// }
// for (int i = 1; i <= num / 2; i++)
// {
// if (num % i == 0)
// {
// if (i > (num / i))
// {
// break;
// }
// if ((num / i) == i)
// {
// cnt++;
// }
// else cnt += 2;
// }
// }
// return cnt;
//}
//int main()
//{
// int num;
// int tmp = 1;
// int i = 2;
// scanf("%d", &num);
// while (f(tmp) <= num)
// {
// tmp += i;
// i++;
// }
// printf("%d", tmp);
// return 0;
//}
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,i;
scanf("%d %d",&a,&b);
if(((a*a)-(4*b)) <=0)
{
printf("-1");
return 0;
}
else if(((a*a)-(4*b)) ==0)
{
printf("x+%d",a+sqrt(((a*a)-(4*b))));
}
else
{
printf("x+%d\nx+%d",(a-sqrt(((a*a)-(4*b))))/2,(a+sqrt(((a*a)-(4*b))))/2);
}
}