#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(v) v.begin(),v.end() using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; const ld epsylon = 1e-9; typedef unsigned int ui; int n,m,sqm,p; vector,int> > allRocks; int xs,ys,zs,xe,ye,ze; void push3(queue& q, int x, int y, int z) { q.push(x); q.push(y); q.push(z); } void pop3(queue& q, int& x, int& y, int& z) { x = q.front(); q.pop(); y=q.front();q.pop(); z=q.front();q.pop(); } pair ,int> tupl(int x,int y,int z) { return make_pair(make_pair(x,y),z); } bool isVis(set,int> > &s,int x,int y,int z) { return s.count(tupl(x,y,z)); } int sqr(int x) { return x*x; } bool canJump(set,int> > &s, int x, int y, int z, int nx, int ny, int nz) { if (z != nz) { return x==nx&&y==ny; } else { return sqr(x-nx)+sqr(y-ny)<=sqm; } } int main() { freopen("dimensions.in","r",stdin); freopen("dimensions.out","w",stdout); scanf("%d %d %d",&n,&m,&p); int x,y,z; sqm=sqr(m); for (int i = 0; i < p; ++i) { scanf("%d %d %d",&x,&y,&z); allRocks.push_back(tupl(x,y,z)); } scanf("%d %d %d",&xs,&ys,&zs); scanf("%d %d %d",&xe,&ye,&ze); vector,int> > res; set, int> > vis; queue q; map,int>,pair,int> > pars; push3(q,xs,ys,zs); pair,int> start = tupl(xs,ys,zs); pars[start]=start; vis.insert(start); while(!q.empty()) { pop3(q,x,y,z); for (int i = 0; i < allRocks.size(); ++i) { int nx = allRocks[i].first.first, ny = allRocks[i].first.second, nz = allRocks[i].second; if (!isVis(vis,nx,ny,nz)) { if (canJump(vis,x,y,z,nx,ny,nz)) { pair,int> neww=tupl(nx,ny,nz), old = tupl(x,y,z); pars[neww] = old; if (nx==xe&&ny==ye&&nz==ze) { goto foundSol; } vis.insert(neww); push3(q,nx,ny,nz); } } } } goto noSol; foundSol: // take the solution from pars pair,int> end = tupl(xe,ye,ze); pair,int> cur = end; while (cur != pars[cur]) { res.push_back(cur); cur = pars[cur]; } if (res[(int)res.size()-1]!=start) { res.push_back(start); } reverse(res.begin(),res.end()); int rr=res.size(); printf("%d\n",rr); for (int i = 0;i