A1103
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
vector<int> pre,temp,fac;
int n,k,p,maxv=-1;
int powl(int x)
{
int temp=1;
for(int i=0; i<p; i++)
temp*=x;
return temp;
}
void init()
{
int temp=0,i=0;
while(temp<=n)
{
pre.push_back(temp);
temp=powl(++i);
}
}
void DFS(int index,int Nown,int num,int sum)
{
if(Nown==k && sum==n)
{
if(num>maxv)
{
maxv=num;
fac=temp;
}
return ;
}
if(Nown>k || sum>n)
return ;
if(index-1>=0)
{
temp.push_back(index);
DFS(index,Nown+1,num+index,sum+pre[index]);
temp.pop_back();
DFS(index-1,Nown,num,sum);
}
}
int main()
{
cin >> n >> k >> p;
init();
DFS(pre.size()-1,0,0,0);
if(maxv==-1)
cout << "Impossible";
else
{
printf("%d = %d^%d",n,fac[0],p);
for(int i=1; i<fac.size(); i++)
{
printf(" + %d^%d",fac[i],p);
}
}
return 0;
}