#include #include #include #include #include #include using namespace std; typedef complex pt; typedef vector snake; namespace std{ inline bool operator<(const pt &a,const pt &b){ return make_pair(real(a),imag(a)) &dest) { int n=buf.size(); if (pos==n) dest.push_back(buf); else for (int i=st;i<7;i++){ pt p=base[pos]+vect[i]; for (int j=0;j tbl; static vector rev; void regist(const snake &s) { if (tbl.count(s)==0){ tbl.insert(make_pair(s,tbl.size())); rev.push_back(s); } } vector > > next; void all_gen(snake &s) { int n=s.size(); regist(snake(s.begin()+1,s.end())); if (n==8) return; for (int i=0;i<6;i++){ pt p=s[n-1]+vect[i]; for (int j=0;j tmp; snake buf(s.size()); gen_next(s,buf,0,0,tmp); set > ss; for (int j=0;j >(ss.begin(),ss.end())); } } int main() { init(); for (int n;cin>>n,n!=0;){ int sx,sy;cin>>sx>>sy; pt hd(sx,sy); snake sn; for (int i=0;i>x>>y; sn.push_back(pt(x,y)-hd); } int sid=tbl[sn]; int k;cin>>k; set st; for (int i=0;i>x>>y; st.insert(pt(x,y)); } int gx,gy;cin>>gx>>gy; pt g(gx,gy); typedef pair spos; queue > q; q.push(make_pair(0,spos(hd,sid))); set ss; for (;;){ int depth=q.front().first; spos cur=q.front().second; q.pop(); if (cur.first==g||depth==20){ cout< &nx=next[cur.second]; for (int j=0;j