#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<cmath>#include<cctype>#include<string>#include<cstdlib>#include<algorithm>#include<iostream>#include<ctime>#include<map>using namespace std;#define L(x) x<<1#define R(x) x<<1|1#define MS(x,y) memset(x,y,sizeof(x))#define MF(x,n) for(int i=0;i<=n;i++) x[i]=inf;#define fora(x,a,b) for(x=a;x<=b;x++)#define forb(x,a,b) for(x=a;x>=b;x--)bool vis[1<<20];struct node{ int x,step;}cur;queue<node>que;int n;int jjj,jjj1;void bfs(){ int sta,k1,k2,i,hhh1,hhh2,ttt=0; while(!que.empty()) { cur=que.front();que.pop(); sta=cur.x; if(sta==0) { printf("%dn",cur.step); return ; } k1=jjj;k2=jjj1; while(k1||k2) { hhh1=hhh2=sta; hhh1=(hhh1^k1)&hhh1 hhh2=(hhh2^k2)&hhh2 if((hhh1!=sta)&&(!vis[hhh1])) { vis[hhh1]=true; node s={hhh1,cur.step+1}; que.push(s); } if((hhh2!=sta)&&(!vis[hhh2])) { vis[hhh2]=true; node s={hhh2,cur.step+1}; que.push(s); } k1=k1>>1; k2=k2>>1; } } puts("-1");}int main(){ int i,now,len,sum,bbb; char op[100]; bool sign; while(scanf("%d",&len)!=EOF) { while(!que.empty()) que.pop(); jjj=jjj1=0;bbb=0;sum=0; memset(vis,false,sizeof(vis)); scanf("%s",op); sign=false; for(i=0;i<len;i++) { if(op[i]=='*') { sign=true; bbb=1; continue; } if(sign&&op[i]=='*') bbb++; if(sign&&op[i]!='.') break; } for(i=0;i<len;i++) if(op[i]=='*') { sum++; jjj=(jjj|(1<<i)); } for(i=len-1;i>=0;i--) if(op[i]=='*') jjj1=(jjj1|(1<<(len-i-1))); scanf("%d",&n);now=0; if(sum==0) { printf("%dn",-1); continue; } if(sum==bbb) len=sum; if(sum==len) { printf("%dn",n/sum+((n%sum)!=0)); continue; } for(i=0;i<n;i++) jjj=jjj<<1,jjj1=jjj1<<1; for(i=0;i<n;i++) now=now|(1<<i); node s={now,0}; que.push(s); vis[now]=true; bfs(); } return 0;}


