#include <iostream>
#include <vector>
#include <map>
#include <math.h>
using namespace std;
typedef pair<int,int> expNumber ;
typedef pair<expNumber,expNumber> ansPair;
bool isFact(int a,vector<expNumber> &v){
int power=2;
bool flag=false;
do{
int base = pow((double)a,1./(double)power)+1.e-7;
double fa = pow((double)base,(double)power);
if(fabs(fa-a)<1.e-7){
v.emplace_back(base,power);
flag=true;
}
power++;
}while(pow(a,1./power)>=2.);
return flag;
}
vector<ansPair> search(int num){
vector<ansPair> ans;
for (int a = 4; a <= (num+1)/2; a++) {
vector<expNumber> eA,eB;
int b = num-a;
if(!isFact(b,eB))continue;
if(!isFact(a,eA))continue;
for (auto&& ita : eA) {
for (auto&& itb : eB) {
ans.emplace_back(ita,itb);
}
}
}
return ans;
}
void printAnsPair(int num,vector<ansPair> v){
if(v.empty()){
cout<<"o^o+o^o="<<num<<" is nothing"<<endl;
return;
}
for (auto&& it : v) {
printf("%d^%d+%d^%d=%d\n",it.first.first,it.first.second,
it.second.first,it.second.second,num);
}
cout <<endl;
}
int main(void){
vector<int> query={2017,20017,200017,2000017};
for(auto&& n: query)printAnsPair(n,search(n));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8bWF0aC5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgcGFpcjxpbnQsaW50PiBleHBOdW1iZXIgOwp0eXBlZGVmIHBhaXI8ZXhwTnVtYmVyLGV4cE51bWJlcj4gYW5zUGFpcjsKCmJvb2wgaXNGYWN0KGludCBhLHZlY3RvcjxleHBOdW1iZXI+ICZ2KXsKICBpbnQgcG93ZXI9MjsKICBib29sIGZsYWc9ZmFsc2U7CiAgZG97CiAgICBpbnQgYmFzZSA9IHBvdygoZG91YmxlKWEsMS4vKGRvdWJsZSlwb3dlcikrMS5lLTc7CiAgICBkb3VibGUgZmEgPSBwb3coKGRvdWJsZSliYXNlLChkb3VibGUpcG93ZXIpOwogICAgaWYoZmFicyhmYS1hKTwxLmUtNyl7CiAgICAgIHYuZW1wbGFjZV9iYWNrKGJhc2UscG93ZXIpOwogICAgICBmbGFnPXRydWU7CiAgICB9CiAgICBwb3dlcisrOwogIH13aGlsZShwb3coYSwxLi9wb3dlcik+PTIuKTsKICByZXR1cm4gZmxhZzsKfQoKdmVjdG9yPGFuc1BhaXI+IHNlYXJjaChpbnQgbnVtKXsKICB2ZWN0b3I8YW5zUGFpcj4gYW5zOwogIGZvciAoaW50IGEgPSA0OyBhIDw9IChudW0rMSkvMjsgYSsrKSB7CiAgICB2ZWN0b3I8ZXhwTnVtYmVyPiBlQSxlQjsKICAgIGludCBiID0gbnVtLWE7CiAgICBpZighaXNGYWN0KGIsZUIpKWNvbnRpbnVlOwogICAgaWYoIWlzRmFjdChhLGVBKSljb250aW51ZTsKICAgIGZvciAoYXV0byYmIGl0YSA6IGVBKSB7CiAgICAgIGZvciAoYXV0byYmIGl0YiA6IGVCKSB7CiAgICAgICAgYW5zLmVtcGxhY2VfYmFjayhpdGEsaXRiKTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gYW5zOwp9Cgp2b2lkIHByaW50QW5zUGFpcihpbnQgbnVtLHZlY3RvcjxhbnNQYWlyPiB2KXsKICBpZih2LmVtcHR5KCkpewogIAljb3V0PDwib15vK29ebz0iPDxudW08PCIgaXMgbm90aGluZyI8PGVuZGw7CiAgCXJldHVybjsKICB9CiAgZm9yIChhdXRvJiYgaXQgOiB2KSB7CiAgICBwcmludGYoIiVkXiVkKyVkXiVkPSVkXG4iLGl0LmZpcnN0LmZpcnN0LGl0LmZpcnN0LnNlY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LnNlY29uZC5maXJzdCxpdC5zZWNvbmQuc2Vjb25kLG51bSk7CiAgfQogIGNvdXQgPDxlbmRsOwp9CgppbnQgbWFpbih2b2lkKXsKICB2ZWN0b3I8aW50PiBxdWVyeT17MjAxNywyMDAxNywyMDAwMTcsMjAwMDAxN307CiAgZm9yKGF1dG8mJiBuOiBxdWVyeSlwcmludEFuc1BhaXIobixzZWFyY2gobikpOwogIHJldHVybiAwOwp9Cgo=