#pragma GCC optimize("Ofast") #pragma GCC target("avx2") #define rd() ({long _v=0,_c;while(_c=*rp++-48,_c>=0)_v=_v*10+_c;_v;}) typedef unsigned long ulong; char buf[1024]; struct A { int op; char* ep; struct A* c1; struct A* c2; }; struct B { struct A a[301]; }; struct B pool[8192]; struct B* pp=pool; struct B* eval(char**epp,long m){ char*e=*epp; struct B*mul=0; struct B*add=0; char*mulp=0; char*addp=0; while(1){ struct B*cur; if(*e=='('){ ++e; cur=eval(&e,m); }else{ long v=0; for(long c;c=*e-'0',c>=0&&c<=9;e++){ v=v*10+c; } cur=pp++; cur->a[v].op='0'; } { char*curp=e++; if(mul){ struct B*r=pp++; for(int x=0;x<=m;++x){ if(mul->a[x].op){ for(int y=0;y<=m;++y){ if(cur->a[y].op){ if(y){ struct A*a=&r->a[x/y]; a->op='/'; a->c1=&mul->a[x]; a->c2=&cur->a[y]; a->ep=mulp; } if(x*y<=m){ struct A*a=&r->a[x*y]; a->op='*'; a->c1=&mul->a[x]; a->c2=&cur->a[y]; a->ep=mulp; } } } } } mul=r; }else{ mul=cur; } mulp=curp; } if(*mulp!='&'){ if(add){ struct B*r=pp++; for(int x=0;x<=m;++x){ if(add->a[x].op){ for(int y=0;y<=m;++y){ if(mul->a[y].op){ if(x-y>=0){ struct A*a=&r->a[x-y]; a->op='-'; a->c1=&add->a[x]; a->c2=&mul->a[y]; a->ep=addp; } if(x+y<=m){ struct A*a=&r->a[x+y]; a->op='+'; a->c1=&add->a[x]; a->c2=&mul->a[y]; a->ep=addp; } } } } } add=r; }else{ add=mul; } mul=0; addp=mulp; if(*addp=='\n'||*addp==')'){ break; } } } *epp=e; return add; } void apply(struct A*a){ if(a){ if(a->ep) *a->ep=a->op; apply(a->c1); apply(a->c2); } } int main(){ read(0,buf,sizeof buf); char*rp=buf; long m=rd(); long ans=rd(); char*expr=rp; struct B*b=eval(&expr,m); if(b->a[ans].op==0){ write(1,"-1\n",3); }else{ apply(&b->a[ans]); write(1,rp,expr-rp); } _exit(0); }