#include <iostream>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
string to_string(const vector<int>& poly)
{
ostringstream os;
size_t deg = poly.size();
if(deg > 2)
{
--deg;
os << poly[deg] << "x^" << deg;
}
os.setf(ios_base::showpos);
while(deg-- > 2)
{
os << poly[deg] << "x^" << deg;
}
os << poly[deg--] << "x";
os << poly[deg];
return os.str();
}
vector<int> from_string(const string& str)
{
istringstream is(str);
vector<int> result;
char c;
int x = 0;
while(is.get(c))
{
switch(c)
{
case '+':
case '-':
is.putback(c);
is >> x;
result.push_back(x);
break;
case '^':
is >> x;
break;
default:
if(isdigit(c))
{
is.putback(c);
is >> x;
result.push_back(x);
}
break;
}
}
reverse(result.begin(), result.end());
return result;
}
int main()
{
vector<int> koef = {5, -5, 3};
string s = to_string(koef);
cout << s << endl;
vector<int> result = from_string(s);
for(int i : result)
{
cout << i << " ";
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJpbmcgdG9fc3RyaW5nKGNvbnN0IHZlY3RvcjxpbnQ+JiBwb2x5KQp7CiAgb3N0cmluZ3N0cmVhbSBvczsKICBzaXplX3QgZGVnID0gcG9seS5zaXplKCk7CgogIGlmKGRlZyA+IDIpCiAgewogICAgLS1kZWc7CiAgICBvcyA8PCBwb2x5W2RlZ10gPDwgInheIiA8PCBkZWc7CiAgfQoKICBvcy5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKCiAgd2hpbGUoZGVnLS0gPiAyKQogIHsKICAgIG9zIDw8IHBvbHlbZGVnXSA8PCAieF4iIDw8IGRlZzsKICB9CgogIG9zIDw8IHBvbHlbZGVnLS1dIDw8ICJ4IjsKICBvcyA8PCBwb2x5W2RlZ107CgogIHJldHVybiBvcy5zdHIoKTsKfQoKdmVjdG9yPGludD4gZnJvbV9zdHJpbmcoY29uc3Qgc3RyaW5nJiBzdHIpCnsKICBpc3RyaW5nc3RyZWFtIGlzKHN0cik7CiAgdmVjdG9yPGludD4gcmVzdWx0OwogIGNoYXIgYzsKICBpbnQgeCA9IDA7CiAgd2hpbGUoaXMuZ2V0KGMpKQogIHsKICAgIHN3aXRjaChjKQogICAgewogICAgICBjYXNlICcrJzoKICAgICAgY2FzZSAnLSc6CiAgICAgICAgaXMucHV0YmFjayhjKTsKICAgICAgICBpcyA+PiB4OwogICAgICAgIHJlc3VsdC5wdXNoX2JhY2soeCk7CiAgICAgIGJyZWFrOwogICAgICBjYXNlICdeJzoKICAgICAgICBpcyA+PiB4OwogICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBpZihpc2RpZ2l0KGMpKQogICAgICAgIHsKICAgICAgICAgIGlzLnB1dGJhY2soYyk7CiAgICAgICAgICBpcyA+PiB4OwogICAgICAgICAgcmVzdWx0LnB1c2hfYmFjayh4KTsKICAgICAgICB9CiAgICAgIGJyZWFrOwogICAgfQogIH0KICByZXZlcnNlKHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOwogIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkKewogIHZlY3RvcjxpbnQ+IGtvZWYgPSB7NSwgLTUsIDN9OwogIHN0cmluZyBzID0gdG9fc3RyaW5nKGtvZWYpOwoKICBjb3V0IDw8IHMgPDwgZW5kbDsKCiAgdmVjdG9yPGludD4gcmVzdWx0ID0gZnJvbV9zdHJpbmcocyk7CgogIGZvcihpbnQgaSA6IHJlc3VsdCkKICB7CiAgICBjb3V0IDw8IGkgPDwgIiAiOwogIH0KfQ==