#include #include #include #include #include #include using namespace std; const int maxn=10005; const int INF=0x3fffffff; int que[maxn]; int st[110]; int g[110][110]; int inque[maxn]; int dis[maxn]; int n, num; struct Node { int v, cost; Node(int v_,int cost_) { v=v_, cost=cost_; } }; mapmp; vectorvt[maxn]; void spfa(int start) { int h=0, t=0; for(int i=1; i<=n; i++) { dis[i]=INF; inque[i]=0; } dis[start]=0; inque[start]=1; que[t++]=start; while(h!=t) { int u=que[h++]; inque[u]=0; if(h==maxn) h=0; for(int i=0; idis[u]+cost) { dis[v]=dis[u]+cost; if(!inque[v]) { inque[v]=1; que[t++]=v; if(t==maxn) t=0; } } } } for(int i=1; i<=n; i++) { if(dis[i]<=600) { g[mp[start]][mp[i]]=1; } } } void floyd() { for(int k=0; k<=num+1; k++) for(int i=0; i<=num+1; i++) for(int j=0; j<=num+1; j++) { if(g[i][j]>g[i][k]+g[k][j]) g[i][j]=g[i][k]+g[k][j]; } } int main() { int h, m, u, v, cost; while(cin >> n, n) { cin >> num; mp.clear(); for(int i=0; i<=n; i++) vt[i].clear(); for(int i=0; i<=num+2; i++) for(int j=0; j<=num+2; j++) { g[i][j]=INF; if(i==j) g[i][j]=0; } for(int i=1; i<=num; i++) { scanf("%d",st+i); mp[st[i]]=i; } st[0]=1; mp[1]=0; st[num+1]=n; mp[n]=num+1; cin >> m; for(int i=0; i