#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #define MAX 110 using namespace std; char s[200]; int k; int result[MAX]; void work(int a[], int b[], int b1, int c[],int c1) { int i,j; for(i=0;i<c1;i++) { c[i]=0; } if (b1 > c1) b1 = c1; for(i=0; i<b1; i++) { if (b[i]) { for(j=0; j<c1-i; j++) { c[i+j] = a[j]*b[i] + c[i+j]; c[i+j+1]= c[i+j+1] + c[j+i]/10; c[i+j] = c[i+j]%10; } } } } int main() { int a[MAX],b[MAX],c[MAX],aa[MAX]; int i,j,tp,num,n; cin>>s>>k; n=strlen(s); for(i=0;i<n;i++) a[n-i-1] = s[i] - '0'; for (i=0; i<k; i++) aa[i] = a[i]; result[0]=1; for(i=0; i<k; i++) { for(j=0;j<=i;j++) b[j]=aa[j]; tp=b[i]; num=0; do { work(a, b, i+1, c, i+1); num++; for(n=0; n<k; n++) b[n]=c[n]; }while ((num<10) && (b[i]!=tp)); if(b[i]!=tp) { cout<<-1<<endl; return 0; } for(j=0;j<k;j++) b[j] = a[j]; for(j=0;j<num-1;j++) { work(a, b, k, c, k); for(n=0;n<MAX;n++) a[n]=c[n]; } work(result, &num,1, c, MAX); for(n=0; n<MAX; n++) result[n]=c[n]; } for (i=MAX-1; result[i]==0; i--); for( /*posi*/; i>=0 ; i--) cout<<result[i]; return 0; } /************************************************************** Problem: 2255 User: admin Language: C++ Result: Accepted Time:101 ms Memory:2076 kb ****************************************************************/