#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
int n,k,p,maxFacSum=-1;
vector<int> fac,temp,ans;
void init()
{
int i=1;
double temp=0;
while(temp<=n)
{
fac.push_back(temp);
temp=pow(i,p);
i++;
}
}
void DFS(int index,int nowK,int sum,int facSum)
{
if(sum==n&&nowK==k) ///miss== error:non-Ivalue in assignment
{
if(facSum>maxFacSum)
{
ans=temp;
maxFacSum=facSum;
}
return;
}
if(sum>n||nowK>k) return;
if(index>1)
{
temp.push_back(index);
DFS(index,nowK+1,sum+fac[index],facSum+index);
temp.pop_back();
DFS(index-1,nowK,sum,facSum);
}
}
int main()
{
scanf("%d%d%d",&n,&k,&p);
init();
DFS(fac.size()-1,0,0,0);
if(maxFacSum==-1) printf("Impossible\n");
else
{
printf("%d=%d^%d",n,ans[0],p);
for(int i=1;i<ans.size();i++)
printf("+%d^%d",ans[i],p);
}
return 0;
}
講真,到了提高篇真心好難啊,答案是一回事,自己寫就是另一回事了,桑心~~~