{"id":180043,"date":"2013-05-20T09:39:03","date_gmt":"2013-05-20T05:39:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=180043"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=180043","title":{"rendered":"<span class=\"post_title\">\u0414\u0435\u043b\u043e \u043e \u043c\u0430\u043b\u043e\u043a\u0441\u043a\u043e\u043c \u0441\u0435\u0439\u0444\u0435<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" align=\"left\" src=\"http:\/\/habrastorage.org\/storage2\/0d5\/0df\/d49\/0d50dfd49c220bacf9d9ce5d25f1ef9e.png\"\/> <br \/>  \u0414\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0438\u0437 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0437\u0434\u0435\u0441\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0438\u0433\u0440\u0430 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D1%81%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D1%80%D0%B5%D0%B9%D0%BD%D0%B4%D0%B6%D0%B5%D1%80%D1%8B\">\u041a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0420\u0435\u0439\u043d\u0434\u0436\u0435\u0440\u044b<\/a>. \u0422\u0430\u043a\u0436\u0435, \u044f \u043d\u0435 \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0448\u0438\u0431\u0443\u0441\u044c, \u0435\u0441\u043b\u0438 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e, \u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0435\u0440\u0435, \u0441\u0432\u043e\u0438\u043c \u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u0430 \u0438\u0433\u0440\u0430 \u043e\u0431\u044f\u0437\u0430\u043d\u0430, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u043c \u0435\u0439, <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D1%81%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D1%80%D0%B5%D0%B9%D0%BD%D0%B4%D0%B6%D0%B5%D1%80%D1%8B#.D0.9A.D0.B2.D0.B5.D1.81.D1.82.D1.8B\">\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c \u043a\u0432\u0435\u0441\u0442\u0430\u043c<\/a>. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043a\u0432\u0435\u0441\u0442\u043e\u0432, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u00ab\u0426\u0438\u0442\u0430\u0434\u0435\u043b\u0438\u00bb \u0438\u043b\u0438 \u00ab\u041b\u044b\u0436\u043d\u044b\u0439 \u043a\u0443\u0440\u043e\u0440\u0442\u00bb, \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0433\u0440\u044b. <\/p>\n<p>  \u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435, \u0443 \u043c\u0435\u043d\u044f \u043b\u0438\u0447\u043d\u043e, \u043a \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c \u043a\u0432\u0435\u0441\u0442\u0430\u043c \u0434\u0432\u043e\u044f\u043a\u043e\u0435. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043e\u043d\u0438 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0438 \u043d\u0435\u0432\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u043c\u043e \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u043d\u044b. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445, \u043f\u0440\u043e\u0439\u0442\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u041a\u0432\u0435\u0441\u0442 \u00ab\u041f\u044f\u0442\u043d\u0430\u0448\u043a\u0438\u00bb, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043c\u0435\u043d\u044f \u0432 \u0442\u0443\u043f\u0438\u043a. \u042f \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0435\u0448\u0430\u044e \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0439\u0434\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430 \u043c\u0435\u043d\u044f.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0418\u0442\u0430\u043a, \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u044f, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0435\u0439\u0444, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0448\u0438\u0442\u044c \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0443, \u0434\u043e \u0431\u043e\u043b\u0438 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0449\u0443\u044e \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e \u0438\u0433\u0440\u0443 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%8F%D1%82%D0%BD%D0%B0%D1%88%D0%BA%D0%B8\">15<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/f9b\/1e1\/aa8\/f9b1e1aa88ddd58f8d38966e307b1021.png\" alt=\"image\"\/><\/p>\n<p>  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0432\u0430\u0436\u043d\u044b\u0445 \u043e\u0442\u043b\u0438\u0447\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c:<\/p>\n<ol>\n<li>\u0413\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0445\u043e\u0434\u043e\u0432<\/li>\n<li>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0446\u0438\u0444\u0440\u044b \u043d\u0430 \u0444\u0438\u0448\u043a\u0430\u0445 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442\u0441\u044f<\/li>\n<\/ol>\n<p>  \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0445\u043e\u0434\u043e\u0432, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435, \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0437\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043b\u044e\u0431\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u044e\u0449\u0435\u0435 59 \u0445\u043e\u0434\u043e\u0432). \u0421\u043e \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0443\u043d\u043a\u0442\u043e\u043c \u0432\u0441\u0435 \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e. \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. <\/p>\n<p>  \u0428\u0438\u0440\u043e\u043a\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0432 \u0438\u0433\u0440\u0435 \u00ab15\u00bb \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0439, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0445\u043e\u0434\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0445\u043e\u0434\u043e\u0432, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0437\u0430\u0434\u0430\u043d\u0438\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 \u043f\u0430\u0440\u043d\u044b\u0445 \u0444\u0438\u0448\u0435\u043a \u043d\u0435 \u043d\u0430 \u0441\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u043c\u044b, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0448\u0438\u0442\u044c \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0443. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0430\u0440\u043d\u044b\u043c\u0438 \u0444\u0438\u0448\u043a\u0430\u043c\u0438, \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0438\u0445 \u043f\u0435\u0440\u0435\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u0442\u044c, \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0432\u0435\u0434\u044f \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0443 \u043a \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u0433\u0440\u0435 \u00ab15\u00bb. <\/p>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443, \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u044f, \u0438\u043c\u0435\u0435\u0442\u0441\u044f 7 \u043f\u0430\u0440 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0444\u0438\u0448\u0435\u043a, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0448\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 2^(7 \u2014 1) = 64 \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043e\u043a, \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043d\u0435\u0441\u043e\u043c\u043d\u0435\u043d\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u0447\u0438, \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 16 \u043a\u043b\u0435\u0442\u043e\u043a, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 16 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445 (\u043f\u0443\u0441\u0442\u0430\u044f \u043a\u043b\u0435\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0443\u043b\u0435\u043c). \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u0438 8-\u0431\u0430\u0439\u0442\u043d\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0438 \u00ab15\u00bb (\u0441 \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u0444\u0438\u0448\u043a\u0430\u043c\u0438):<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">solver.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#ifndef SOLVER_H_ #define SOLVER_H_  #include &lt;stdio.h&gt; #include &quot;common.h&quot; #include &quot;PerfCnt.h&quot;  class Solver {     public:         Solver(Long startPos, Long endPos, int stepCnt):          startPos(startPos),          endPos(endPos),          stepCnt(stepCnt),          posCnt(0),          perfCnt() {}         bool solve();     private:         Long        startPos;         Long        endPos;         int         stepCnt;         Long        posCnt;         PerfCnt     perfCnt;         static Long pos[MAX_DEEP];         static Byte step[MAX_DEEP];         void dumpSolve(int deep);         void dumpPos(int delta);         void dumpTotal();         bool checkPos(Long p, int deep);         bool solve(int deep, int delta, int startDelta, int X, int Y);         Long getStep(Long p, int x, int y, int dx, int dy, int& dd); };  #endif <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">solver.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;solver.h&quot;  Long Solver::pos[MAX_DEEP]; Byte Solver::step[MAX_DEEP];  void Solver::dumpPos(int delta) {     printf(&quot;Distance: %d\\n\\n&quot;, delta);     Long mask = 0xFFFF;     for (int shift = 48; shift &gt;= 0; shift -= 16) {         int x = (int)((startPos & (mask &lt;&lt; shift)) &gt;&gt; shift);         int y = (int)((endPos & (mask &lt;&lt; shift)) &gt;&gt; shift);         printf(&quot;%04X %04X\\n&quot;, x, y);     } }  void Solver::dumpSolve(int deep) {     printf(&quot;\\n&quot;);     for (int i = 0; i &lt; deep; i++) {         printf(&quot;%d&quot;, step[i]);     }     printf(&quot;\\n&quot;); }  void Solver::dumpTotal() {     printf(&quot;\\nCount: %6I64d\\n&quot;, posCnt);     printf(&quot;Time: %7.3f\\n\\n&quot;, perfCnt.elapsed()); }  bool Solver::checkPos(Long p, int deep) {     int j = MAX_LOOP;     for (int i = deep - 1; i &gt;=0; i--) {         if (pos[i] == p) return true;         if (--j &lt;= 0) break;     }     return false; }  bool Solver::solve() {     if (stepCnt &gt;= MAX_DEEP) return false;     pos[0]    = startPos;     int delta = getDelta(startPos, endPos);     int X     = getX(startPos);     int Y     = getY(startPos);     dumpPos(delta);     bool r = solve(0, delta, delta, X, Y);     dumpTotal();     return r; }  Long Solver::getStep(Long p, int x, int y, int dx, int dy, int& dd) {     Long digit = getDigit(p, x + dx, y + dy);     if (digit == 0) return p;     if (dx != 0) {         int delta = getDeltaX(startPos, endPos, digit);         if (delta * dx &lt;= 0) {             dd++;         } else {             dd--;         }     }     if (dy != 0) {         int delta = getDeltaY(startPos, endPos, digit);         if (delta * dy &lt;= 0) {             dd++;         } else {             dd--;         }     }     xorDigit(p, x, y, digit);     xorDigit(p, x + dx, y + dy, digit);     return p; }  bool Solver::solve(int deep, int delta, int startDelta, int X, int Y) {     if (pos[deep] == endPos) {         dumpSolve(deep);         return true;     }     if (delta &gt; stepCnt - deep) {         return false;     }     if (delta - startDelta &gt; MAX_DELTA_DIFF) {         return false;     }     for (int i = 0; i &lt; 4; i++) {         int dd = 0;         int dx = 0;         int dy = 0;         switch (i) {             case 0:                 dy--;                 break;             case 1:                 dx++;                 break;             case 2:                 dy++;                 break;             case 3:                 dx--;                 break;         }         if ((X + dx &lt; 1)||(Y + dy &lt; 1)||(X + dx &gt; 4)||(Y + dy &gt; 4)) continue;         if (deep + 1 &gt;= MAX_DEEP) return false;         pos[deep + 1] = getStep(pos[deep], X, Y, dx, dy, dd);         if (checkPos(pos[deep + 1], deep)) continue;         step[deep] = i;         posCnt++;         if (solve(deep + 1, delta + dd, startDelta, X + dx, Y + dy)) return true;     }     return false; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042d\u0442\u043e \u043e\u0431\u044b\u043a\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c. \u041c\u044b \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0445\u043e\u0434\u044b, \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0442\u0443-\u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e. \u0421\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0445\u043e\u0434\u044b \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u043c \u0446\u0438\u0444\u0440\u0430\u043c\u0438 \u043e\u0442 0 \u0434\u043e 3, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u043c\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u0443\u0441\u0442\u043e\u0439 \u043a\u043b\u0435\u0442\u043a\u0438 (0 \u2014 \u0432\u0432\u0435\u0440\u0445, 1 \u2014 \u0432\u043f\u0440\u0430\u0432\u043e, 2 \u2014 \u0432\u043d\u0438\u0437, 3 \u2014 \u0432\u043b\u0435\u0432\u043e):<\/p>\n<pre><code class=\"cpp\">        switch (i) {             case 0:                 dy--;                 break;             case 1:                 dx++;                 break;             case 2:                 dy++;                 break;             case 3:                 dx--;                 break;         } <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0445\u0440\u0430\u043d\u0438\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432 \u0432 \u0441\u0442\u0435\u043a\u0435 (\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0445\u043e\u0434\u043e\u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0438, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432). <\/p>\n<p>  \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u2014 \u043b\u0430\u0432\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0435 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u043f\u043e\u0438\u0441\u043a\u0430. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a-\u0442\u043e \u043e\u0442\u0441\u0435\u043a\u0430\u0442\u044c \u0445\u043e\u0434\u044b, \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435 \u0432\u0435\u0434\u0443\u0449\u0438\u0435 \u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044e. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442 2 \u0434\u043e 4 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432 (\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0443\u0441\u0442\u043e\u0439 \u043a\u043b\u0435\u0442\u043a\u0438), \u043f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0440\u0430\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 (\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u0445\u043e\u0434\u044b, \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0441\u0442\u0435\u043a\u0435).<\/li>\n<li>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c <a href=\"http:\/\/en.wikipedia.org\/wiki\/Manhattan_distance\">\u043c\u0430\u043d\u0445\u0435\u0442\u0442\u0435\u043d\u0441\u043a\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/a> \u0434\u043e \u0438\u0441\u043a\u043e\u043c\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 (\u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0445\u043e\u0434\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0432\u0441\u0435\u0445 \u0444\u0438\u0448\u0435\u043a \u043d\u0430 \u0441\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0438\u0448\u043a\u0438 \u0438\u043c \u043d\u0435 \u043c\u0435\u0448\u0430\u044e\u0442). \u0414\u0430\u043b\u0435\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443, \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0445\u043e\u0434\u043e\u0432, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0439 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c (\u0437\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0437\u043d\u0430\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0430 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0437\u0430 N \u0445\u043e\u0434\u043e\u0432).<\/li>\n<\/ol>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437 (\u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438), \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044f \u0438\u043b\u0438 \u0434\u0435\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044f \u044d\u0442\u0443 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0444\u0438\u0448\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0445\u043e\u0434.<\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">common.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#ifndef COMMON_H_ #define COMMON_H_  typedef unsigned __int64 Long; typedef unsigned __int16 Short; typedef unsigned char    Byte;  const int MAX_POSITION    = 4; const int MAX_DIGIT       = 15; const int MAX_DEEP        = 100; const int MAX_LOOP        = 10; const int MAX_TASKS       = 100; const int MAX_DELTA_DIFF  = 5;  int  getPosition(Long part); int  getX(Long state); int  getY(Long state); int  getX(Long state, Long d); int  getY(Long state, Long d); int  getDeltaX(Long a, Long b, Long d); int  getDeltaY(Long a, Long b, Long d); int  getDelta(Long a, Long b); Long getDigit(Long p, int x, int y); void xorDigit(Long& p, int x, int y, Long d); void setDigit(Long& p, Long m, Long d);  #endif <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">common.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;common.h&quot; #include &lt;math.h&gt;  Long digit[MAX_DIGIT + 1] = {     0x0000000000000000L,     0x1111111111111111L,     0x2222222222222222L,     0x3333333333333333L,     0x4444444444444444L,     0x5555555555555555L,     0x6666666666666666L,     0x7777777777777777L,     0x8888888888888888L,     0x9999999999999999L,     0xAAAAAAAAAAAAAAAAL,     0xBBBBBBBBBBBBBBBBL,     0xCCCCCCCCCCCCCCCCL,     0xDDDDDDDDDDDDDDDDL,     0xEEEEEEEEEEEEEEEEL,     0xFFFFFFFFFFFFFFFFL  };  int getPosition(Long part) {     for (int i = 4; i &gt; 0; i--) {         if ((part & 0xF) == 0) return i;         part &gt;&gt;= 4;     }     return 0; }  int getX(Long state) {     for (int i = 4; i &gt;= 1; i--) {         int r = getPosition(state & 0xFFFF);         if (r != 0) return r;         state &gt;&gt;= 16;     }     return 0; }  int getY(Long state) {     for (int i = 4; i &gt;= 1; i--) {         int r = getPosition(state & 0xFFFF);         if (r != 0) return i;         state &gt;&gt;= 16;     }     return 0; }  int getX(Long state, Long d) {     state ^= digit[d];     return getX(state); }  int getY(Long state, Long d) {     state ^= digit[d];     return getY(state); }  int getDeltaX(Long a, Long b, Long d) {     a ^= digit[d]; b ^= digit[d];     return getX(a) - getX(b); }  int getDeltaY(Long a, Long b, Long d) {     a ^= digit[d]; b ^= digit[d];     return getY(a) - getY(b); }  int getDelta(Long a, Long b) {     int r = 0;     for (Long d = 1; d &lt;= MAX_DIGIT; d++) {         r += abs(getDeltaX(a, b, d));         r += abs(getDeltaY(a, b, d));     }     return r; }  Long getDigit(Long p, int x, int y) {     for (; y &lt;= 4; y++) {         if (y == 4) {             p &= 0xFFFF;             for (; x &lt;= 4; x++) {                 if (x == 4) {                     return p & 0xF;                 }                 p &gt;&gt;= 4;             }             break;         }         p &gt;&gt;= 16;     }     return -1; }  void xorDigit(Long& p, int x, int y, Long d) {     for (; x &lt; 4; x++) {         d &lt;&lt;= 4;     }     for (; y &lt; 4; y++) {         d &lt;&lt;= 16;     }     p ^= d; }  void setDigit(Long& p, Long m, Long d) {     p ^= p & m;     m &= digit[d];     p ^= m; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u0446\u0435\u043b\u044f\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0443:<\/p>\n<pre><code>1 2 3 4   5 1 3 4 5 6 7 8   9 2 B 7 9 A B C   D 6 A 8 D E F       E F C <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u0441\u0430\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440, \u044f \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u0434\u043b\u044f \u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e 11 \u0445\u043e\u0434\u043e\u0432. <\/p>\n<p>  \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0438, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043e\u0442\u0432\u0435\u0442 \u0437\u0430 \u0442\u044b\u0441\u044f\u0447\u043d\u0443\u044e \u0434\u043e\u043b\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u044b:<\/p>\n<pre><code>Distance: 11  1234 5134 5678 92B7 9ABC D6A8 DEF0 0EFC  00323003222  Count:     18 Time:   0.001 <\/code><\/pre>\n<p>  \u041c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e 18 \u043f\u043e\u0437\u0438\u0446\u0438\u0439. \u0427\u0442\u043e\u0431\u044b \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0445\u043e\u0434\u043e\u0432 \u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u044f \u0431\u0443\u0434\u0443 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0445\u043e\u0434\u043e\u0432, \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439. <\/p>\n<p>  \u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/0e5\/b28\/f5f\/0e5b28f5f03478b159daafb2641e3570.png\" alt=\"image\"\/><\/p>\n<p>  \u041f\u0438\u043b\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043d\u043e\u0432\u044b\u0435 (\u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0435) \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0445\u043e\u0434\u043e\u0432. \u041a\u0430\u043a \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0430\u0440\u043d\u044b\u0445 \u0444\u0438\u0448\u0435\u043a. \u0412 \u044d\u0442\u043e\u043c, \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">initializer.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#ifndef INITIALIZER_H_ #define INITIALIZER_H_  #include &quot;common.h&quot; #include &quot;solver.h&quot;  struct Task {     Long startPos;     Long endPos;     int  delta;     bool isProcessed; };  class Initializer {     public:         Initializer(Long startPos, Long endPos, int stepCnt):          startPos(startPos),          endPos(endPos),          stepCnt(stepCnt),          taskCnt(0) {}         bool solve();     private:         Long        startPos;         Long        endPos;         int         stepCnt;         int         taskCnt;         static Task tasks[MAX_TASKS];         static int  digits[MAX_DIGIT + 1];         bool checkInit(Long s, Long e);         bool addPos(Long s, Long e);         bool init(Long s, Long e);         Long getFreeDigit();         bool checkPos(Long s, Long e);         void normalize(Long& p);         void dumpPos(Long s, Long e, int delta); };  #endif <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">initializer.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;initializer.h&quot;  Task Initializer::tasks[MAX_TASKS]; int  Initializer::digits[MAX_DIGIT + 1];  bool Initializer::solve() {     if (!init(startPos, endPos)) return false;     while (true) {         int mn = stepCnt;         int ix = -1;         for (int i = 0; i &lt; taskCnt; i++) {             if (tasks[i].isProcessed) continue;             if (stepCnt - tasks[i].delta &lt; mn) {                 mn = stepCnt - tasks[i].delta;                 ix = i;             }         }         if (ix &lt; 0) break;         tasks[ix].isProcessed = true;         Solver solver(tasks[ix].startPos, tasks[ix].endPos, stepCnt);         if (solver.solve()) return true;     }     return false; }  bool Initializer::checkInit(Long s, Long e) {     for (int i = 0; i &lt;= MAX_DIGIT; i++) {          digits[i] = 0;     }     for (int i = 0; i &lt;= MAX_DIGIT; i++) {         digits[s & 0xF]++;         s &gt;&gt;= 4;     }     if (digits[0] != 1) return false;     for (int i = 0; i &lt;= MAX_DIGIT; i++) {         digits[e & 0xF]--;         e &gt;&gt;= 4;     }     for (int i = 0; i &lt;= MAX_DIGIT; i++) {          if (digits[i] != 0) return false;     }     return true; }  void Initializer::dumpPos(Long s, Long e, int delta) {     printf(&quot;0x&quot;);     Long mask = 0xFFFF;     for (int shift = 48; shift &gt;= 0; shift -= 16) {         int x = (int)((s & (mask &lt;&lt; shift)) &gt;&gt; shift);         printf(&quot;%04X&quot;, x);     }     printf(&quot; 0x&quot;);     mask = 0xFFFF;     for (int shift = 48; shift &gt;= 0; shift -= 16) {         int x = (int)((e & (mask &lt;&lt; shift)) &gt;&gt; shift);         printf(&quot;%04X&quot;, x);     }     printf(&quot; %d\\n&quot;, delta); }  bool Initializer::addPos(Long s, Long e) {     if (!checkPos(s, e)) return true;     if (taskCnt &gt;= MAX_TASKS) return false;     tasks[taskCnt].startPos = s;     tasks[taskCnt].endPos = e;     tasks[taskCnt].delta = getDelta(s, e);     tasks[taskCnt].isProcessed = false;     if (tasks[taskCnt].delta == 0) return false;     if (tasks[taskCnt].delta &gt; stepCnt) return true;     taskCnt++;     return true; }  Long Initializer::getFreeDigit() {     for (Long i = 1; i &lt;= MAX_DIGIT; i++) {         if (digits[i] == 0) return i;     }     return 0; }  bool Initializer::init(Long s, Long e) {     for (int i = 0; i &lt;= MAX_DIGIT; i++) {          digits[i] = 0;     }     Long x = s;     for (int i = 0; i &lt;= MAX_DIGIT; i++) {         digits[x & 0xF]++;         x &gt;&gt;= 4;     }     bool f = true;     for (int i = 0; i &lt;= MAX_DIGIT; i++) {          if (digits[i] != 1) f = false;     }     if (f) {         return addPos(s, e);     }     Long d = getFreeDigit();     if (d == 0) return false;     x = s;     Long ms = 0xF;     for (int i = 0; i &lt;= MAX_DIGIT; i++) {         Long t = x & 0xF;         if (digits[t] &gt; 1) {             setDigit(s, ms, d);             Long y = e;             Long me = 0xF;             for (int j = 0; j &lt;= MAX_DIGIT; j++) {                 if ((y & 0xF) == t) {                     Long k = e;                     setDigit(k, me, d);                     if (!init(s, k)) return false;                 }                 me &lt;&lt;= 4;                 y &gt;&gt;= 4;             }             break;         }         ms &lt;&lt;= 4;         x &gt;&gt;= 4;     }     return true; }  void Initializer::normalize(Long& p) {     int x = getX(p);     int y = getY(p);     for (; x &lt; 4; x++) {         Long d = getDigit(p, x + 1, y);         xorDigit(p, x + 1, y, d);         xorDigit(p, x, y, d);     }     for (; y &lt; 4; y++) {         Long d = getDigit(p, x, y + 1);         xorDigit(p, x, y + 1, d);         xorDigit(p, x, y, d);     } }  bool Initializer::checkPos(Long s, Long e) {     normalize(s); normalize(e);     Long nums[16] = {0};     int  ix = 0;     for (int y = 1; y &lt; 4; y++) {         for (int x = 1; x &lt; 4; x++) {             Long d = getDigit(e, x, y);             if (d != 0) {                 nums[d] = ++ix;             }         }     }     int cn = 0;     for (int y = 1; y &lt; 4; y++) {         for (int x = 1; x &lt; 4; x++) {             Long d = getDigit(s, x, y);             for (Long i = 1; i &lt;= 15; i++) {                 if (nums[i] &lt; nums[d]) {                     int Y = getY(s, i);                     if (Y &lt; y) continue;                     if (Y &gt; y) {                         cn++;                         break;                     }                     int X = getX(s, i);                     if (X &gt; x) {                         cn++;                         break;                     }                 }             }         }     }     return (cn & 1) == 0; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0438\u043c\u0435\u0435\u0442 \u043b\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438 \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0430 \u0437\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0445\u043e\u0434\u043e\u0432 (\u043b\u0443\u0447\u0448\u0435 \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0434\u043b\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0435\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f).<\/p>\n<p>  \u0412\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0441\u043f\u0438\u0441\u043e\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>0x763258F4E1DCBA90 0x6CBEDA1F29873450 50 0x763258F4E1DCBA90 0x6CBED81F29A73450 48 0x763258F4E1DCBA90 0x6CBEDA9F21873450 48 0x763258F4E1DCBA90 0x6CBED89F21A73450 46 0x763258F4E1DCBA90 0x6C4EDA1F29873B50 44 0x763258F4E1DCBA90 0x65BEDA12F98734C0 44 0x763258F4E1DCBA90 0x6CBE7A1F298D3450 44 0x763258F4E1DCBA90 0x6C4ED81F29A73B50 42 0x763258F4E1DCBA90 0x65BED812F9A734C0 42 0x763258F4E1DCBA90 0x6CBE781F29AD3450 42 0x763258F4E1DCBA90 0x6CB3DA1F2987E450 42 0x763258F4E1DCBA90 0x6C4EDA9F21873B50 42 0x763258F4E1DCBA90 0x65BEDA92F18734C0 42 0x763258F4E1DCBA90 0x6CBE7A9F218D3450 42 0x763258F4E1DCBA90 0x6CB3D81F29A7E450 40 0x763258F4E1DCBA90 0x6C4ED89F21A73B50 40 0x763258F4E1DCBA90 0x65BED892F1A734C0 40 0x763258F4E1DCBA90 0x6CBE789F21AD3450 40 0x763258F4E1DCBA90 0x6CB3DA9F2187E450 40 0x763258F4E1DCBA90 0x654EDA12F9873BC0 38 0x763258F4E1DCBA90 0x6C4E7A1F298D3B50 38 0x763258F4E1DCBA90 0x65BE7A12F98D34C0 38 0x763258F4E1DCBA90 0x6CB3D89F21A7E450 38 0x763258F4E1DCBA90 0x654ED812F9A73BC0 36 0x763258F4E1DCBA90 0x6C4E781F29AD3B50 36 0x763258F4E1DCBA90 0x65BE7812F9AD34C0 36 0x763258F4E1DCBA90 0x6C43DA1F2987EB50 36 0x763258F4E1DCBA90 0x65B3DA12F987E4C0 36 0x763258F4E1DCBA90 0x6CB37A1F298DE450 36 0x763258F4E1DCBA90 0x654EDA92F1873BC0 36 0x763258F4E1DCBA90 0x6C4E7A9F218D3B50 36 0x763258F4E1DCBA90 0x65BE7A92F18D34C0 36 0x763258F4E1DCBA90 0x6C43D81F29A7EB50 34 0x763258F4E1DCBA90 0x65B3D812F9A7E4C0 34 0x763258F4E1DCBA90 0x6CB3781F29ADE450 34 0x763258F4E1DCBA90 0x654ED892F1A73BC0 34 0x763258F4E1DCBA90 0x6C4E789F21AD3B50 34 0x763258F4E1DCBA90 0x65BE7892F1AD34C0 34 0x763258F4E1DCBA90 0x6C43DA9F2187EB50 34 0x763258F4E1DCBA90 0x65B3DA92F187E4C0 34 0x763258F4E1DCBA90 0x6CB37A9F218DE450 34 0x763258F4E1DCBA90 0x654E7A12F98D3BC0 32 0x763258F4E1DCBA90 0x6C43D89F21A7EB50 32 0x763258F4E1DCBA90 0x65B3D892F1A7E4C0 32 0x763258F4E1DCBA90 0x6CB3789F21ADE450 32 0x763258F4E1DCBA90 0x654E7812F9AD3BC0 30 0x763258F4E1DCBA90 0x6543DA12F987EBC0 30 0x763258F4E1DCBA90 0x6C437A1F298DEB50 30 0x763258F4E1DCBA90 0x65B37A12F98DE4C0 30 0x763258F4E1DCBA90 0x654E7A92F18D3BC0 30 0x763258F4E1DCBA90 0x6543D812F9A7EBC0 28 0x763258F4E1DCBA90 0x6C43781F29ADEB50 28 0x763258F4E1DCBA90 0x65B37812F9ADE4C0 28 0x763258F4E1DCBA90 0x654E7892F1AD3BC0 28 0x763258F4E1DCBA90 0x6543DA92F187EBC0 28 0x763258F4E1DCBA90 0x6C437A9F218DEB50 28 0x763258F4E1DCBA90 0x65B37A92F18DE4C0 28 0x763258F4E1DCBA90 0x6543D892F1A7EBC0 26 0x763258F4E1DCBA90 0x6C43789F21ADEB50 26 0x763258F4E1DCBA90 0x65B37892F1ADE4C0 26 0x763258F4E1DCBA90 0x65437A12F98DEBC0 24 0x763258F4E1DCBA90 0x65437812F9ADEBC0 22 0x763258F4E1DCBA90 0x65437A92F18DEBC0 22 0x763258F4E1DCBA90 0x65437892F1ADEBC0 20 <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u044f \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u0447\u0438\u0442\u0430\u043b, \u0447\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0438\u0441\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u0439, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0435\u0440\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043f\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434, \u043d\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0436\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c 42, \u043f\u043e\u0438\u0441\u043a \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 10 \u043c\u0438\u043d\u0443\u0442 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u044f \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u0440\u0438\u0443\u043d\u044b\u043b \u0438 \u043d\u0430\u0447\u0430\u043b \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432, \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_A*\">A*<\/a>. \u041d\u043e, \u0443\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e \u0438\u043d\u0435\u0440\u0446\u0438\u0438, \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430:<\/p>\n<pre><code class=\"cpp\">#include &lt;iostream&gt; #include &lt;tchar.h&gt; #include &quot;initializer.h&quot;  int _tmain(int argc, _TCHAR* argv[]) {     Initializer m(0x763258F4E1DCBA90, 0x65437892F1ADEBC0, 59);     m.solve();     return 0; } <\/code><\/pre>\n<p>  \u042f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u0448\u043b\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0435:<\/p>\n<pre><code>Distance: 20  7632 6543 58F4 7892 E1DC F1AD BA90 EBC0  00032103210321032330111223010323032112233000121221  Count: 6117348 Time:    2.404 <\/code><\/pre>\n<p>  \u0412\u0441\u0435\u0433\u043e \u0437\u0430 \u0434\u0432\u0435 \u0441 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u0439 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<p>  \u041a\u0432\u0435\u0441\u0442 \u043f\u0440\u043e\u0439\u0434\u0435\u043d. <\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u043a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u043d\u0430 <a href=\"https:\/\/github.com\/GlukKazan\/15\">GitHub<\/a>.      \t \t\t   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/180043\/\"> http:\/\/habrahabr.ru\/post\/180043\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" align=\"left\" src=\"http:\/\/habrastorage.org\/storage2\/0d5\/0df\/d49\/0d50dfd49c220bacf9d9ce5d25f1ef9e.png\"\/> <br \/>  \u0414\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0438\u0437 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0437\u0434\u0435\u0441\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0438\u0433\u0440\u0430 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D1%81%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D1%80%D0%B5%D0%B9%D0%BD%D0%B4%D0%B6%D0%B5%D1%80%D1%8B\">\u041a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0420\u0435\u0439\u043d\u0434\u0436\u0435\u0440\u044b<\/a>. \u0422\u0430\u043a\u0436\u0435, \u044f \u043d\u0435 \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0448\u0438\u0431\u0443\u0441\u044c, \u0435\u0441\u043b\u0438 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e, \u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0435\u0440\u0435, \u0441\u0432\u043e\u0438\u043c \u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u0430 \u0438\u0433\u0440\u0430 \u043e\u0431\u044f\u0437\u0430\u043d\u0430, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u043c \u0435\u0439, <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D1%81%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D1%80%D0%B5%D0%B9%D0%BD%D0%B4%D0%B6%D0%B5%D1%80%D1%8B#.D0.9A.D0.B2.D0.B5.D1.81.D1.82.D1.8B\">\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c \u043a\u0432\u0435\u0441\u0442\u0430\u043c<\/a>. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043a\u0432\u0435\u0441\u0442\u043e\u0432, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u00ab\u0426\u0438\u0442\u0430\u0434\u0435\u043b\u0438\u00bb \u0438\u043b\u0438 \u00ab\u041b\u044b\u0436\u043d\u044b\u0439 \u043a\u0443\u0440\u043e\u0440\u0442\u00bb, \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0433\u0440\u044b. <\/p>\n<p>  \u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435, \u0443 \u043c\u0435\u043d\u044f \u043b\u0438\u0447\u043d\u043e, \u043a \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c \u043a\u0432\u0435\u0441\u0442\u0430\u043c \u0434\u0432\u043e\u044f\u043a\u043e\u0435. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043e\u043d\u0438 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0438 \u043d\u0435\u0432\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u043c\u043e \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u043d\u044b. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445, \u043f\u0440\u043e\u0439\u0442\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u041a\u0432\u0435\u0441\u0442 \u00ab\u041f\u044f\u0442\u043d\u0430\u0448\u043a\u0438\u00bb, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043c\u0435\u043d\u044f \u0432 \u0442\u0443\u043f\u0438\u043a. \u042f \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0435\u0448\u0430\u044e \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0439\u0434\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430 \u043c\u0435\u043d\u044f.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-180043","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/180043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=180043"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/180043\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=180043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=180043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=180043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}