#include <bits/stdc++.h>
using namespace std;
//分别为二次项,一次项,常数项的系数
double a = 0, b = 0, c = 0;
int pos = -1; //等号位置
int main() {
string s;
while (getline(cin, s)) {
//1.找到等号的位置
for (int i = 0; i < s.length(); i++) {
if (s[i] == '=') {
pos = i;
break;
}
}
//2.判断一下开头和等号后面系数是不是负的,如果是正的就应该加个正号
if (s[0] != '-') {
s.insert(0, 1, '+');
pos++;
}
if (s[pos + 1] != '-') s.insert(pos + 1, 1, '+');
//3.将等号右边的移项到左边
for (int i = pos + 1; i < s.length(); i++) {
if (s[i] == '+') s[i] = '-';
else if (s[i] == '-') s[i] = '+';
}
//4.将等于号去掉
s.erase(pos, 1);
//5.进行遍历,统计各次系数
for (int i = 0; i < s.length();) {
bool fushu = 0;//默认不是负数
if (s[i] == '+' || s[i] == '-') {
//判断一下符号
if (s[i] == '-') fushu = 1;//是负数
i++;
//如果符号紧跟的是数字,这个数字可以是任何次项的系数
if (isdigit(s[i])) {
string xishu = "";
if (isdigit(s[i])) {
//先统计系数
while (isdigit(s[i]) && i < s.length()) {
xishu += s[i];
i++;
}
if (fushu == 1) xishu.insert(0, 1, '-');
//到尾巴了,或者接着的是符号,则一定是常数项的系数
if (i == s.length() || s[i] == '+' || s[i] == '-')
c += stoi(xishu);
else {
//系数紧接着是x,不能确定是一次还是二次
if (s[i] == 'x') {
if (i < s.length() - 1) {
i++;
//如果x紧接着是^,那就是二次的系数
if (s[i] == '^') {
a += stoi(xishu);
i += 2;//跳过^2
} else { //否则就是一次的系数
b += stoi(xishu);
}
}
}
}
}
}
//如果符号紧跟的是x,只可能是一次或者二次的系数,且系数一定是1/-1
if (s[i] == 'x') {
if (i < s.length() - 1) {
i++;
//如果x后面跟的是^,则是二次系数
if (s[i] == '^') {
if (fushu == 1) a--;
else a++;
i++;
} else {
if (fushu == 1) b--;
else b++;
i--;
}
} else {
if (fushu == 1) b--;
else b++;
}
i++;
}
}
}
bool youjie = 1;
double t = b * b - 4 * a * c;
if (t < 0) {
cout << "No Solution" << endl;
youjie = 0;//无解
}
if (youjie == 1) {
double res1 = double(-b + sqrt(t)) / (2 * a);
double res2 = double(-b - sqrt(t)) / (2 * a);
if (res1 > res2) swap(res1, res2);
cout << fixed << setprecision(2) << res1 << " " << res2 << endl;
}
}
}
// 64 位输出请用 printf("%lld")