{"id":222815,"date":"2014-05-14T23:23:03","date_gmt":"2014-05-14T19:23:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=222815"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=222815","title":{"rendered":"<span class=\"post_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u043c\u0430\u0439\u0441\u043a\u043e\u0433\u043e \u0445\u0430\u0431\u0440\u0430\u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u044f: \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u0413\u041b\u041e\u041d\u0410\u0421\u0421<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/d19\/67e\/f16\/d1967ef164a3824ed8be8cb0da2e8387.jpg\" align=\"right\"\/>\u0418\u0442\u0430\u043a, \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u0432\u0435\u0441\u0442\u0438 \u0438\u0442\u043e\u0433\u0438 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0435\u0433\u043e \u043c\u0430\u0439\u0441\u043a\u043e\u0433\u043e <a href=\"http:\/\/habrahabr.ru\/company\/wayray\/blog\/222279\/\">\u0445\u0430\u0431\u0440\u0430\u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u044f<\/a>. \u0411\u044b\u043b\u043e \u043f\u0440\u0438\u0441\u043b\u0430\u043d\u043e 49 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043f\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044e \u0438 8 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432\u043d\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0430 (\u043f\u043e\u0437\u0436\u0435 \u0434\u0435\u0434\u043b\u0430\u0439\u043d\u0430, \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f, \u043d\u0430 \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441). \u0427\u0442\u043e-\u0436, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0442\u043e \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b.<\/p>\n<p>  \u0425\u043e\u0442\u044f \u0432 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430 \u0441 \u0441\u0430\u043c\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043b\u044e\u0434\u0438 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u043b\u0438, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0435 \u0438 \u0441\u0430\u043c\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438, \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f <a href=\"http:\/\/habrahabr.ru\/users\/lany\/\" class=\"user_link\">lany<\/a> \u2014 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0441\u0430\u043c\u044b\u043c \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u043c \u0432\u0441\u0435\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 <a href=\"http:\/\/habrahabr.ru\/users\/frommi\/\" class=\"user_link\">Frommi<\/a> \u0431\u044b\u043b\u043e \u0432\u0434\u0432\u043e\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0435\u0435, 863 \u0431\u0430\u0439\u0442\u0430 \u2014 \u043d\u043e \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 <a href=\"http:\/\/habrahabr.ru\/users\/ibessonov\/\" class=\"user_link\">ibessonov<\/a> \u043d\u0430 1613 \u0431\u0430\u0439\u0442\u0430 \u2014 \u043d\u043e \u043e\u043d\u043e \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0442\u0435\u0441\u0442\u0435. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u043c\u0435\u043d\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0443\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<ol>\n<li><a href=\"http:\/\/habrahabr.ru\/users\/lany\/\" class=\"user_link\">lany<\/a> \u2014 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c, 89.9448 \u0431\u0430\u043b\u043b\u043e\u0432 \u0438 \u0441\u0430\u043c\u043e\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. <br \/>  \u0421\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0435\u0441\u0442 (2.4\u0413\u0431) \u043f\u0440\u043e\u0439\u0434\u0435\u043d \u0437\u0430 0.61 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. <br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">\/\/@lany public class G{java.io.InputStream I=System.in;int c,i=0,j,m,M;double[]S=new double[512],C=new double[512];byte[]P=&quot;111001100011101101&quot;.getBytes(),d=new byte[999999];double N=4.0678884e13,L=29.9792458,X,Y,q,F,G,H=1e99;S[]z;S f,g;class S{double x,y,r,q,R,Q;S(){x=new Double(l());y=new Double(l());try{I.read(d);I.skip(9000001);}catch(Exception e){}q=L*o()+L\/2;Q=q*q;r=q-L;R=r*r;l();}int o(){int o=0,p;for(;;o+=10){for(p=0;p&lt;18;p++)if(P[p]!=d[o+p*10])break;if(p==18){while(d[--o]&gt;48);return o+1;}}}}void u(double X,double Y){if(X*X+Y*Y&lt;N){double S=d(X,Y);if(S&lt;H){H=S;F=X;G=Y;}}}double d(double x,double y){double q=0,Q=-1,X,Y;for(S s:z){X=x-s.x;Y=y-s.y;X=X*X+Y*Y;if(X&gt;s.Q)q+=X-s.Q;else if(X&lt;s.R)q+=s.R-X;else if(q==0){Y=Math.sqrt(X);Q*=Math.min(s.q-Y,Y-s.r)*.1;}}return q&gt;0?q:Q;}void b(double r,double R){if(r+R&gt;q){double d=Math.abs(r*r-R*R+q*q)\/2\/q,h=Math.sqrt(r*r-d*d),x=f.x+X*d,y=f.y+Y*d;u(x-Y*h,y+X*h);u(x+Y*h,y-X*h);}}String l(){char[]o=new char[99];int p=0,b;try{while((b=I.read())!=10)o[p++]=(char)b;}catch(Exception e){}return new String(o,0,p).trim();}public static void main(String[]a){new G();}G(){for(;i&lt;512;i++){q=Math.PI*i\/256;S[i]=Math.sin(q);C[i]=Math.cos(q);}c=new Short(l());z=new S[c];for(i=0;i&lt;c;)z[i++]=new S();for(i=1;i&lt;c&&H&gt;0;i++)for(j=0;j&lt;i&&H&gt;0;j++){f=z[i];g=z[j];X=g.x-f.x;Y=g.y-f.y;q=Math.sqrt(X*X+Y*Y);X\/=q;Y\/=q;b(f.q,g.q);b(f.r,g.q);b(f.q,g.r);b(f.r,g.r);}double x=F,y=G,r=d(x,y),t=r&lt;1e10?1e3:3e6,u,v,w,R;while(t&gt;.1&&(i++&lt;999||r&gt;0)){R=r;X=x;Y=y;for(M=4;M&lt;513&&R==r;M*=2){for(m=0;m&lt;M;m++)if(M&lt;5||m%2&gt;0){j=m*512\/M;u=x+S[j]*t;v=y+C[j]*t;if(u*u+v*v&lt;N){w=d(u,v);if(w&lt;R){X=u;Y=v;R=w;}}}}if(R&lt;r){x=X;y=Y;r=R;}else t\/=2;}System.out.println(x+&quot; &quot;+y);}}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/users\/akashta\/\" class=\"user_link\">AKashta<\/a> \u2014 86.9558 \u0431\u0430\u043b\u043b\u0430, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0442\u0435\u0441\u0442\u0435 \u0432\u0434\u0432\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 <a href=\"http:\/\/habrahabr.ru\/users\/lany\/\" class=\"user_link\">lany<\/a>, \u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u043b \u043f\u043e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438.<br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">\/\/@AKashta  import java.io.*; import java.util.ArrayList;  public class Main {      public static final boolean ADVANCED_MODE = true;     public static final int MAX_POINTS = 50;     public static final double PRECISION = 30;     public static final int THRESHOLD = 300;      public static final String START_TOKEN = &quot;111001100011101101&quot;;     public static final long DATA_LENGTH = 10000000;     public static final long SPEED = 299792458;     public static final long EARTH_R = 6378000;     public static final long MIN_SAT_POS = 10000000;     public static final long MAX_SAT_POS = 20000000;     public static final int MIN_OFFSET = (int)((MIN_SAT_POS - EARTH_R) * DATA_LENGTH \/ SPEED);     public static final int MAX_OFFSET = (int)((MAX_SAT_POS + EARTH_R) * DATA_LENGTH \/ SPEED);      public static void main(String args[ ]) {         \/\/long startTime = System.currentTimeMillis();         try {             DataInputStream in = new DataInputStream(System.in);             DataReader reader = new DataReader(in);             Point result = null;              int q = reader.readInt();             ArrayList&lt;Circle&gt; sats = new ArrayList&lt;Circle&gt;(q);             for(int i = 0; i &lt; Math.min(q, MAX_POINTS); i++) {                 double x = reader.readDouble();                 double y = reader.readDouble();                 int offset = reader.readOffset();                  double radius = ((double)SPEED \/ DATA_LENGTH * offset);                  sats.add(new Circle(new Point(x, y),  radius));             }              if(sats.size() == 2) {                 ArrayList&lt;Point&gt; points = sats.get(0).intersect(sats.get(1));                 for(Point p : points) {                     result = p;                     break;                 }             }  else {                 if(ADVANCED_MODE) {                     result = advancedCalc(sats);                 } else {                     result = simpleCalc(sats);                 }             }              System.out.println(result.x + &quot; &quot; + result.y);             \/\/long time = (System.currentTimeMillis() - startTime);             \/\/System.out.println(&quot;Time: &quot; + time);         } catch (Exception e) {             System.out.println(e.getMessage());         }     }      public static Point findRefPoint(ArrayList&lt;Circle&gt; sats){         ArrayList&lt;Point&gt; points = new ArrayList&lt;Point&gt;();         for(int i = 0; i &lt; 2; i++) {             for(int j = i + 1; j &lt; 3; j++) {                 points.addAll(sats.get(i).intersect(sats.get(j)));             }         }          Point p0 = null, p1 = null, p2 = null;         for(Point p : points) {             for(Point t : points) {                 if(p1 == null && t != p && p.distance(t) &lt; THRESHOLD){                     p1 = t;                     continue;                 }                 if(p1 != null && t != p && t != p1 && p.distance(t) &lt; THRESHOLD){                     p2 = t;                     break;                 }             }             if(p1 != null && p2 != null) {                 p0 = p;                 break;             } else {                 p1 = null;                 p2 = null;             }         }         return new Point((p0.x + p1.x + p2.x) \/ 3, (p0.y + p1.y + p2.y) \/ 3);     }      public static Point advancedCalc(ArrayList&lt;Circle&gt; sats){         ArrayList&lt;Point&gt; allPoints = new ArrayList&lt;Point&gt;();         for(int i = 0; i &lt; sats.size() - 1; i++) {             for(int j = i + 1; j &lt; sats.size(); j++) {                 allPoints.addAll(sats.get(i).intersect(sats.get(j)));             }         }          int count = 0;         double sumX = 0;         double sumY = 0;          for(Point p : allPoints) {             boolean containsInAll = true;             for (Circle sat : sats){                 if(!sat.hasPoint(p)) {                     containsInAll = false;                     break;                 }             }             if(containsInAll) {                 count++;                 sumX += p.x;                 sumY += p.y;             }         }         return new Point(sumX \/ count, sumY \/ count);     }      public static Point simpleCalc(ArrayList&lt;Circle&gt; sats){         int count = 0;         double sumX = 0;         double sumY = 0;          Point refPoint = findRefPoint(sats);         for(int i = 0; i &lt; sats.size() - 1; i++) {             for(int j = i + 1; j &lt; sats.size(); j++) {                 for(Point p : sats.get(i).intersect(sats.get(j))) {                     if(refPoint.distance(p) &lt; THRESHOLD) {                         count++;                         sumX += p.x;                         sumY += p.y;                     }                 }             }         }         return new Point(sumX \/ count, sumY \/ count);     }      public static class DataReader {         private DataInputStream _in;          public DataReader(DataInputStream in){             _in = in;         }          public int readOffset() throws Exception {             byte firstByte = _in.readByte();             int offset = 1;             while( _in.readByte() == firstByte) {                 offset++;             }             int needToSkip = ((MIN_OFFSET - offset) \/ 10) * 10;             _in.skipBytes(needToSkip);             offset += needToSkip;              byte[] buffer = new byte[MAX_OFFSET - offset];             _in.read(buffer);             _in.skipBytes((int) DATA_LENGTH - offset - buffer.length - 1 + 2);              StringBuilder sb = new StringBuilder(buffer.length \/ 10);             for(int i = 0; i &lt; buffer.length \/ 10; i++ ){                 sb.append((char) buffer[i * 10]);             }              int index = sb.indexOf(START_TOKEN)* 10;              return index + offset;         }          public String readLine() throws Exception {             StringBuilder sb = new StringBuilder();             char c;             while((c = (char)_in.readByte()) != '\\r') {                 sb.append(c);             }             _in.readByte(); \/\/ read '\\n' char             return  sb.toString();         }          public int readInt() throws Exception {             String s = readLine();             return Integer.parseInt(s);         }          public Double readDouble() throws Exception {             String s = readLine();             return Double.parseDouble(s);         }     }      public static class Point {         public double x;         public double y;          public Point(double x, double y) {             this.x = x;             this.y = y;         }          public double distance() {             return Math.sqrt(x*x + y*y);         }          public double distance(Point p) {             return Math.sqrt(Math.pow(x - p.x, 2) + Math.pow(y - p.y, 2));         }     }      public static class Circle {         public Point center;         public double radius;         public Circle(Point p, double r) {             center = p;             radius = r;         }          public ArrayList&lt;Point&gt; intersect(Circle c) {             ArrayList&lt;Point&gt; result = new ArrayList&lt;Point&gt;();              double dx = c.center.x - center.x;             double dy = c.center.y - center.y;             double d = Math.sqrt((dy * dy) + (dx * dx));              if(d &lt; Math.abs(radius - c.radius)) {                 if(radius &lt; c.radius)                     radius += Math.abs(radius - c.radius) - d + 0.1;                 else                     c.radius += Math.abs(radius - c.radius) - d + 0.1;             }             if (d &gt; (radius + c.radius)) {                 double add = (d - (radius + c.radius))\/ 2.0 + 0.1;                 radius += add;                 c.radius += add;             }              if (d &gt; (radius + c.radius) || d &lt; Math.abs(radius - c.radius)) {                 \/\/System.out.println(&quot;do not intersect&quot;);                 return result;             }              double a = ((radius * radius) - (c.radius * c.radius) + ( d *d)) \/ (2.0 * d);              Point p2 = new Point(center.x + (dx * a\/d), center.y + (dy * a\/d));              double h = Math.sqrt((radius * radius) - (a*a));             double rx = -dy * (h\/d);             double ry = dx * (h\/d);              Point p = new Point(p2.x + rx, p2.y + ry);             if(p.distance() &lt;= EARTH_R) {                 result.add(p);             }             p = new Point(p2.x - rx, p2.y - ry);             if(p.distance() &lt;= EARTH_R) {                 result.add(p);             }              return result;         }          public boolean hasPoint(Point p) {             double d = center.distance(p);             return Math.abs(d - radius) &lt;= PRECISION;         }     } }<\/code><\/pre>\n<\/div>\n<\/div>\n<\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/users\/staker\/\" class=\"user_link\">Staker<\/a> \u2014 83.3059 \u0431\u0430\u043b\u043b\u0430, \u0435\u0449\u0435 \u0447\u0443\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0438 \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0442\u043e\u0447\u043d\u043e.<br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">\/\/@Staker import java.io.BufferedInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.concurrent.LinkedBlockingQueue; import java.util.regex.Matcher; import java.util.regex.Pattern;  public class Staker {   static final double M_PER_TICK = 29.9792458;   static final double TICK_PER_M = 0.03335640951;   static final double MAX_RANGE = 6378000;   static final int MINIMUM_READ_SKIP = 120800;   static final int MAX_READ_SIZE = 885000;   static final int SEQ_SIZE = 10000001;   static final int APPROXIMATION_MARGIN = 50;   static final String START_COMPACT = &quot;111001100011101101&quot;;   static final Pattern START_COMPACT_PATTERN = Pattern.compile(START_COMPACT, Pattern.LITERAL);   static byte[] buf = new byte[SEQ_SIZE];    static long startTime = 0;   static volatile boolean stop = false;   static volatile boolean stopReader = false;      static volatile Solution approximation = null;    static class Satelite {     static final double HALFTICK_MARGIN = 0.001;     static final double HALFTICK = 14.9896229;     static final double HALFTICK_ALLOWED_RANGE = HALFTICK + 0.002;      int index;     double x;     double y;     double range;     double checkRange;          Satelite(double x, double y, double range) {       this(-1, x, y, range);     }          Satelite(int index, double x, double y, double range) { \t    this.index = index; \t    this.x = x; \t    this.y = y; \t    this.range = range; \t  } \t   \t  double scoreSolution(Solution s) { \t    double solutionRange = range(x, y, s.x, s.y); \t    double score = 1; \t    double delta = Math.abs(range - solutionRange);       if (delta &gt; HALFTICK_ALLOWED_RANGE) {         double tempScore = 1\/(1 + delta - HALFTICK_ALLOWED_RANGE);         if (tempScore &lt; score) {           score = tempScore;         }       } \t    return score;   \t  } \t   \t  Satelite halfTickCloser() {; \t    return new Satelite(x, y, range - HALFTICK + HALFTICK_MARGIN); \t  }     Satelite halfTickFarther() {       return new Satelite(x, y, range + HALFTICK - HALFTICK_MARGIN);     }   }      static class Solution {     double x;     double y;     double score;     double spread;     double count;     Solution(double x, double y) {       this.x = x;       this.y = y;       this.score = 0;       this.spread = 0;       this.count = 0;     }     Solution(Solution other) {       this.x = other.x;       this.y = other.y;       this.score = other.score;       this.spread = other.spread;       this.count = other.count;     }     boolean check() {       return range(0, 0, x, y) &lt;= MAX_RANGE;     }   }      static class Buffer extends Object implements CharSequence {     final byte[] byteBuf;     final int offset;     final int len;          Buffer(byte[] buf, int offset, int len) {       this.offset = offset;       this.len = len;       this.byteBuf = buf;     }     @Override     public char charAt(int arg0) {       return (char)byteBuf[offset + arg0 * 10];     }      @Override     public int length() {       return len \/ 10;     }      @Override     public CharSequence subSequence(int arg0, int arg1) {       return null;     }        }   static double range(double x1, double y1, double x2, double y2) {     return Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));   }      static ArrayList&lt;Solution&gt; calc(Satelite s1, Satelite s2) {     ArrayList&lt;Solution&gt; result = new ArrayList&lt;Solution&gt;();     double xT = s2.x - s1.x;       double yT = s2.y - s1.y;     double theta = Math.atan2(yT, xT);     double d = Math.sqrt(xT*xT + yT*yT);     double resX = (s1.range*s1.range - s2.range*s2.range + d*d)\/(2*d);     double resY = Math.sqrt(s1.range*s1.range - resX*resX);     \/\/System.out.format(&quot;Solution [%e %e]\\n&quot;, resX, resY);      double resR = Math.sqrt(resX*resX + resY*resY);     double resT1 = Math.atan2(resY, resX) + theta;     double resT2 = Math.atan2(-resY, resX) + theta;     double finalX1 = resR*Math.cos(resT1) + s1.x;     double finalY1 = resR*Math.sin(resT1) + s1.y;     double finalX2 = resR*Math.cos(resT2) + s1.x;     double finalY2 = resR*Math.sin(resT2) + s1.y;     Solution solution = new Solution(finalX1, finalY1);     if (solution.check()) {       result.add(solution);     }     solution = new Solution(finalX2, finalY2);     if (solution.check()) {       result.add(solution);     }     return result;   }      static int indexOf(byte[] buf, int len, byte[] pattern) {     for (int i = 0; i &lt; len - pattern.length; ++i) {       int j;       for (j = 0; j &lt; pattern.length; ++j) {         if (buf[i + j] != pattern[j]) {           break;         }       }       if (j == pattern.length) {         return i;       }     }      return -1;   }      static Satelite readSatelite(BufferedInputStream in, Solution approximation, int index) throws IOException {     double x = Double.parseDouble(readLine(in));     double y = Double.parseDouble(readLine(in));     in.read(buf, 0, SEQ_SIZE);     \/\/ Handle \\r\\n EOL.     if (buf[SEQ_SIZE - 1] == '\\r') {       in.mark(3);       int c = in.read();       if (c != '\\n') {         in.reset();       }     }     double satOriginDistance = range(0, 0, x, y);     int headSkipSize = (int)((satOriginDistance - MAX_RANGE) * TICK_PER_M);     headSkipSize -= (headSkipSize % 10);     int readSize = MAX_READ_SIZE;     boolean seen0 = false, seen1 = false;     int shift = -1;     while (!seen0 || ! seen1) {       ++shift;       if (buf[shift] == '0') seen0 = true;       if (buf[shift] == '1') seen1 = true;     }     shift = shift % 10;      if (approximation != null) {       double approximateRange = range(x, y, approximation.x, approximation.y);       headSkipSize = (int)(approximateRange * TICK_PER_M - APPROXIMATION_MARGIN);       headSkipSize -= (headSkipSize % 10);       readSize = 2 * APPROXIMATION_MARGIN + START_COMPACT.length() * 10;     }     headSkipSize += shift;     Buffer seq = new Buffer(buf, headSkipSize, readSize);     Matcher matcher = START_COMPACT_PATTERN.matcher(seq);     if (!matcher.find()) {       headSkipSize = MINIMUM_READ_SKIP + shift;       seq = new Buffer(buf, headSkipSize, MAX_READ_SIZE);       matcher.reset(seq);       matcher.find();     }     int ind = matcher.start() * 10 + headSkipSize;      return new Satelite(index, x, y, ind * M_PER_TICK);      }    static boolean checkSpread(ArrayList&lt;Solution&gt; solutions) {     if (solutions.size() &lt; 2) return false;     final double MAX_SPREAD = 400;     double minX, minY, maxX, maxY;     minX = minY = 10000000;     maxX = maxY = -10000000;     for (Solution sol : solutions) {       if (sol.x &gt; maxX) maxX = sol.x;       if (sol.y &gt; maxY) maxY = sol.y;       if (sol.x &lt; minX) minX = sol.x;       if (sol.y &lt; minY) minY = sol.y;     }     return range(minX, minY, maxX, maxY) &lt; MAX_SPREAD;   }    static ArrayList&lt;Solution&gt; pickSingleCluster(ArrayList&lt;Solution&gt; solutions) {     final double MAX_SPREAD = 400;     \/\/ Calculate mean only for solutions close to solution 1.      Solution s1 = solutions.get(0);     ArrayList&lt;Solution&gt; result = new ArrayList&lt;Solution&gt;();     result.add(s1);     for (Solution sol : solutions) {       if (sol == s1) continue;       if (range(s1.x, s1.y, sol.x, sol.y) &lt; MAX_SPREAD) {         result.add(sol);       }     }     return result;       }    static Solution calculateApproximation(ArrayList&lt;Solution&gt; solutions) {     double totalX = 0, totalY = 0;     double minX, minY, maxX, maxY;     minX = minY = 10000000;     maxX = maxY = -10000000;     for (Solution sol : solutions) {       totalX += sol.x;       totalY += sol.y;       if (sol.x &gt; maxX) maxX = sol.x;       if (sol.y &gt; maxY) maxY = sol.y;       if (sol.x &lt; minX) minX = sol.x;       if (sol.y &lt; minY) minY = sol.y;     }     Solution sol = new Solution(totalX\/solutions.size(), totalY\/solutions.size());     sol.spread = range(minX, minY, maxX, maxY);     sol.count = Math.pow(solutions.size(), 0.25);     return sol;   }    static ArrayList&lt;Solution&gt; getSolutionGrid(double x, double y, double stepX, double stepY,       ArrayList&lt;Satelite&gt; sateliteList) {     ArrayList&lt;Solution&gt; areaSolutions = new ArrayList&lt;Solution&gt;(11*11);     for (double xx = x - stepX*5; xx &lt;= x + stepX*5.5; xx += stepX) {       for (double yy = y - stepY*5; yy &lt;= y + stepY*5.5; yy += stepY) {         areaSolutions.add(new Solution(xx, yy));       }     }     return filterResults(areaSolutions, sateliteList);   }    static Solution calculateSolution(Solution approximation, ArrayList&lt;Satelite&gt; sateliteList) {        double step = 10;     ArrayList&lt;Solution&gt; areaSolutions;     Solution current = approximation;     do {       areaSolutions = getSolutionGrid(current.x, current.y, step, step, sateliteList);       if (areaSolutions.size() == 1 && current.score &lt; 1 && areaSolutions.get(0).score &gt; current.score) {         \/\/ Found a better single approximation point.         current = areaSolutions.get(0);                 } else {         step \/= 2;         current = calculateApproximation(areaSolutions);       }     } while (areaSolutions.size() &lt; 20 && step &gt; 0.01);     return current;   }      static void findSolutions(       int startIndex, ArrayList&lt;Satelite&gt; sateliteList, ArrayList&lt;Solution&gt; result) {     for (Satelite sat1 : sateliteList) {       for (Satelite sat2 : sateliteList) {         if (sat2.index &lt;= sat1.index || sat2.index &lt; startIndex) {           continue;         }         result.addAll(calc(sat1, sat2));         result.addAll(calc(sat1.halfTickCloser(), sat2));         result.addAll(calc(sat1.halfTickFarther(), sat2));                  result.addAll(calc(sat1, sat2.halfTickCloser()));         result.addAll(calc(sat1.halfTickCloser(), sat2.halfTickCloser()));         result.addAll(calc(sat1.halfTickFarther(), sat2.halfTickCloser()));                  result.addAll(calc(sat1, sat2.halfTickFarther()));         result.addAll(calc(sat1.halfTickCloser(), sat2.halfTickFarther()));         result.addAll(calc(sat1.halfTickFarther(), sat2.halfTickFarther()));       }     }   }      static ArrayList&lt;Solution&gt; filterResults(       ArrayList&lt;Solution&gt; solutions, ArrayList&lt;Satelite&gt; sateliteList) {     ArrayList&lt;Solution&gt; result = new ArrayList&lt;Solution&gt;();     Solution approximation = null;     double bestScore = 0;     for (Solution sol : solutions) {       double minScore = 1;       for (Satelite satelite : sateliteList) {         double score = satelite.scoreSolution(sol);         if (score &lt; minScore) {           minScore = score;         }       }       if (minScore &gt; bestScore) {         bestScore = minScore;         approximation = sol;       }       if (minScore == 1) {         result.add(sol);         sol.score = 1;       }     }     if (approximation != null && result.size() == 0) {       result.add(approximation);       approximation.score = bestScore;     }     return result;   }      static String readLine(BufferedInputStream in) throws IOException {     StringBuilder result = new StringBuilder();     int c = in.read();     while (c &gt;=0 && c != '\\n' && c != '\\r') {       result.append(Character.toChars(c));       c = in.read();     }     if (c == '\\r') {       in.mark(3);       int tmp = in.read();       if (tmp != '\\n') {         in.reset();       }     }     return result.toString();   }   static class SateliteReader extends Thread {     LinkedBlockingQueue&lt;Satelite&gt; satelites;     BufferedInputStream in;     volatile int numSats = 0;          SateliteReader(LinkedBlockingQueue&lt;Satelite&gt; satelites) {       this.satelites = satelites;     }     @Override     public void run() {       try {         BufferedInputStream in = new BufferedInputStream(System.in);         numSats = Integer.parseInt(readLine(in));         for (int i = 0; i &lt; numSats && !stopReader; ++i) {           satelites.add(readSatelite(in, approximation, i));         }         if (stopReader) {           satelites.add(new Satelite(-1, 0, 0, 0));         }         in.close();       } catch (NumberFormatException e) {         e.printStackTrace();       } catch (IOException e) {         e.printStackTrace();       }     }   }    static class Scorer extends Thread {     volatile ArrayList&lt;Satelite&gt; sateliteList;     ArrayList&lt;Solution&gt; result;     LinkedBlockingQueue&lt;Satelite&gt; scoreSatelites;          Scorer(ArrayList&lt;Satelite&gt; sateliteList, ArrayList&lt;Solution&gt; result,         LinkedBlockingQueue&lt;Satelite&gt; scoreSatelites) {       this.sateliteList = sateliteList;       this.result = result;       this.scoreSatelites = scoreSatelites;     }      @Override     public void run() {       ArrayList&lt;Satelite&gt; localSateliteList = new ArrayList&lt;Satelite&gt;();       while (!stop) {         scoreSatelites.drainTo(localSateliteList);         Solution localApproximation = new Solution(approximation);          localApproximation = calculateSolution(localApproximation, localSateliteList);         approximation = localApproximation;         Satelite sat = null;         try {           sat = scoreSatelites.take();         } catch (InterruptedException e) {           return;         }         localSateliteList.add(sat);       }       stopReader = true;     }   }    static class ScoringDaemon extends Thread {      ScoringDaemon() {     }      @Override     public void run() {       double pScore = 0;       while (true) {         try {           Thread.sleep(0, 10000);         } catch (InterruptedException e) {           return;         }         long currTime = System.nanoTime();         long timePassed = currTime - startTime;         double tScore = 10\/(timePassed\/1000000000.0 + 1.1);         double curPScore;         if (approximation == null) {           curPScore = 0;         } else if (approximation.spread &gt; 1000) {           curPScore = 0;         } else if (approximation.spread &gt; 0) {           curPScore = 100\/(approximation.spread\/2.2 + 10);         } else {           curPScore = 100\/(1\/approximation.score+10.01);         }         if (curPScore &gt; pScore) {           pScore = curPScore;         }         if (pScore &gt; 0 && timePassed &gt; 4800000000L) {           stop = true;         } else if (pScore &gt; tScore) {           \/\/ Good time-precision balance. Stop on next iteration.           stop = true;         }         if (stop) {           return;         }         if (timePassed &gt; 4900000000L) {           \/\/ We have some score and 4.9 seconds passed. Stop now!            complete();         }       }     }   }    static void complete() {     if (approximation != null) {       System.out.format(&quot;%f %f&quot;, approximation.x, approximation.y);     } else {       System.out.print(&quot;0 0&quot;);     }     System.exit(0);   }    public static void main(String[] args) throws IOException, InterruptedException{     startTime = System.nanoTime();     LinkedBlockingQueue&lt;Satelite&gt; readSatelites = new LinkedBlockingQueue&lt;Satelite&gt;();     LinkedBlockingQueue&lt;Satelite&gt; scoreSatelites = new LinkedBlockingQueue&lt;Satelite&gt;();     SateliteReader sateliteReader = new SateliteReader(readSatelites);     sateliteReader.start();     \/\/System.setIn(new FileInputStream(&quot;\/media\/ramdisk\/test3_hi_precision.in&quot;));     \/\/BufferedReader in = new BufferedReader(new InputStreamReader(System.in));      while (sateliteReader.numSats == 0) {       Thread.sleep(0, 1000);     }     int numSats = sateliteReader.numSats;     ArrayList&lt;Satelite&gt; sateliteList = new ArrayList&lt;Satelite&gt;();     ArrayList&lt;Solution&gt; result = new ArrayList&lt;Solution&gt;();     Scorer scorer = new Scorer(sateliteList, result, scoreSatelites);     ScoringDaemon scoringDaemon = new ScoringDaemon();     int startIndex = 0;     while (sateliteList.size() &lt; numSats && !stopReader) {       Satelite sat = readSatelites.take();       if (stopReader) break;       sateliteList.add(sat);       scoreSatelites.add(sat);       if (sateliteList.size() &gt; 1 && approximation == null) {         findSolutions(startIndex, sateliteList, result);         startIndex = sateliteList.size();         result = filterResults(result, sateliteList);         if (checkSpread(result)) {           approximation = calculateApproximation(result);           if (numSats &gt; 2) {             scorer.start();             scoringDaemon.start();           }         }       }     }     scorer.interrupt();     if (approximation == null) {       result = pickSingleCluster(result);       approximation = calculateApproximation(result);     }     approximation = calculateSolution(approximation, sateliteList);          complete();   } }<\/code><\/pre>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<p>  \u0421 \u043f\u043e\u043b\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e <a href=\"http:\/\/s.14.by\/wayray-contest-may-2014.html\">\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u0442\u0443\u0442<\/a>. \u041a\u0440\u0430\u0441\u043d\u044b\u043c \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0435\u043d\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0432\u044b\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u044b (\u043e\u0448\u0438\u0431\u043a\u0430 \u0431\u043e\u043b\u0435\u0435 1000 \u043c\u0435\u0442\u0440\u043e\u0432, \u0438\u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u043e\u043b\u0435\u0435 5 \u0441\u0435\u043a\u0443\u043d\u0434. ). \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0438\u0445 \u043e\u0442\u0432\u0435\u0442\u044b \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u0430\u0446\u0438\u0438 \u2014 <a href=\"http:\/\/s.14.by\/wayray-solutions-main.zip\">\u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442<\/a>. <a name=\"habracut\"><\/a><\/p>\n<h1>\u041e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0445 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e<\/h1>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f MD5 \u2014 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0435\u0442 \u0445\u044d\u0448\u0435\u0439 \u0432 3 \u0440\u0430\u0437\u0430 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 128 \u0431\u0430\u0439\u0442 \u0445\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0440\u0430\u0441\u0447\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 3-\u0433\u043e 64-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430. \u041d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c. <\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u0438\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 1 \u043c\u043b\u043d \u0431\u0438\u0442, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0442\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0434\u043b\u0438\u043d\u043d\u0435\u0435 19-20 \u0431\u0438\u0442 (2^20&gt;1\u043c\u043b\u043d). \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0430\u0439\u0442\u0438 \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0440\u043a\u0435\u0440\u044b (+ \u0438\u0445 \u0441\u0434\u0432\u0438\u0433), \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0441\u0434\u0432\u0438\u0433 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f MD5 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0445 \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432 \u2014 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0435 10 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u0443, \u0430 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c \u043a\u0443\u0441\u043e\u0447\u043a\u043e\u043c \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u043b\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u043e \u0434\u0430\u043b\u043e \u0431\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0435\u0441\u043b\u0438 \u0431\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 (\u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c seek), \u0430 \u043d\u0435 \u043f\u043e\u0442\u043e\u043a\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430. <\/p>\n<p>  \u041a\u0440\u0430\u0439\u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u043a\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0434\u0435\u0442 \u0441 \u0431\u041e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u0430 \u0441 300 \u0434\u043e 30 \u043c\u0435\u0442\u0440\u043e\u0432. \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u2014 \u043c\u044b \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 10 \u043e\u0442 \u0441\u0434\u0432\u0438\u0433\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0414\u0430\u043b\u0435\u0435 \u2014 \u0438\u0441\u043a\u0430\u0442\u044c \u043c\u0430\u0440\u043a\u0435\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0443\u0436\u0435 \u043f\u043e \u043f\u0440\u043e\u0440\u0435\u0436\u0435\u043d\u043d\u043e\u0439 \u0432 10 \u0440\u0430\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u0434\u043b\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438). <br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/d8e\/35f\/4a1\/d8e35f4a1107d86bd5258990683cdcaa.png\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u0430. \u0415\u0441\u043b\u0438 \u0431\u044b \u043e\u043d\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0430 \u0434\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e 100\u043d\u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 (1 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\/10\u041c\u0411\u0438\u0442 = 100\u043d\u0441 = 29.9 \u043c\u0435\u0442\u0440\u043e\u0432) \u2014 \u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430 \u043b\u0435\u0436\u0430\u043b\u0438 \u0431\u044b \u043d\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438. \u0421 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435\u043c \u2014 \u043e\u043d\u0438 \u043b\u0435\u0436\u0430\u0442 \u043d\u0430 \u043a\u043e\u043b\u044c\u0446\u0435 \u0448\u0438\u0440\u0438\u043d\u043e\u0439 \u0432 29.9 \u043c\u0435\u0442\u0440\u043e\u0432. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0437\u0430\u0434\u0430\u0447\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u2014 \u0434\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 N \u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u043b\u0435\u0446 \u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0435\u043c\u043b\u0438. \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430 \u0442\u043e\u0447\u043a\u0443, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0443\u044e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. <\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u00ab\u0442\u043e\u0447\u043d\u043e\u0433\u043e\u00bb \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u0431\u0435\u0449\u0430\u0435\u0442 \u0431\u044b\u0442\u044c \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e\u0439 \u2014 \u043f\u043e\u0442\u043e\u043c\u0443 \u043e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043e: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u0441\u0435\u0442\u043a\u0435 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 0.1 \u043c\u0435\u0442\u0440\u0430) \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043f\u0442\u0438\u043c\u0443\u043c\u0430, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u0442\u0443\u0442 \u043d\u0443\u0436\u043d\u0430 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0430\u044f \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u043c\u043d\u043e\u0433\u043e \u00ab\u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b\u0445\u00bb \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u0432 \u0432\u0438\u0441\u044f\u0442 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0437\u0435\u043c\u043b\u0438.<\/p>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0438 \u043d\u0430\u043c \u0440\u0430\u0441\u043a\u0430\u0436\u0443\u0442 \u043e \u0441\u0432\u043e\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044f\u0445 \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438. <\/p>\n<h1>\u041e \u0442\u0435\u0441\u0442\u0430\u0445<\/h1>\n<p>\u0422\u0435\u0441\u0442\u044b 1-3 \u2014 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u0432 3-5. <br \/>  \u0422\u0435\u0441\u0442 4 \u2014 50 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u0432. <br \/>  \u0422\u0435\u0441\u0442 5 \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0441\u0442, 255 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u0432 (2.4\u0413\u0431 \u0434\u0430\u043d\u043d\u044b\u0445). <br \/>  \u0422\u0435\u0441\u0442 6 \u2014 40 \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u0432 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0432\u0438\u0441\u044f\u0442 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0437\u0435\u043c\u043b\u0438 \u0438 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0437\u0430\u0442\u0435\u043c \u0438\u0434\u0443\u0442 10 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u0432. <\/p>\n<p>  \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b <a href=\"http:\/\/s.14.by\/wayray-tests.zip\">\u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442<\/a> (200\u041c\u0431 \u0432 \u0430\u0440\u0445\u0438\u0432\u0435). <\/p>\n<h1>\u041e \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445<\/h1>\n<p>\u041e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043b\u044e\u0434\u0435\u0439 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u043e \u043e\u0442 \u043d\u0435\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u043e \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0430 \u043d\u0435 \u0442\u043e\u0447\u043a\u043e\u0439 \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043f\u0430\u0434\u0430\u043b\u043e \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438. \u0422\u0430\u043c, \u0433\u0434\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u2014 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043d\u0435 \u0447\u0438\u0441\u043b\u043e. <\/p>\n<p>  \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u2014 \u044f \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b. \u041e\u0434\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0448\u043b\u043e \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 cp1251 \u0441 \u0440\u0443\u0441\u0441\u043a\u0438\u043c\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438, \u0438 javac \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0438\u043d\u043a\u043e\u0432 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u0438\u043c\u043e \u0440\u0443\u0441\u0441\u043a\u0438\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 utf-8 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043a\u043b\u044e\u0447 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 -encoding UTF-8. \u0412 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u0431\u044b\u043b \u0443\u043a\u0430\u0437\u0430\u043d package \u2014 \u0435\u0433\u043e \u044f \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b, \u0434\u043b\u044f \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u043d\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0430 \u0442\u0430\u043a\u0436\u0435 <a href=\"http:\/\/s.14.by\/wayray-contest-may-2014-mistakes.html\">\u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b<\/a>, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u043a\u0430 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043e\u043d\u0438 \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u2014 \u0442\u0430\u043a \u0447\u0442\u043e \u043a\u0443\u0441\u0430\u0442\u044c \u043b\u043e\u043a\u0442\u0438 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. \u041f\u0440\u0438\u0447\u0438\u043d\u044b \u00ab\u0432\u043d\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0430\u00bb: <a href=\"http:\/\/habrahabr.ru\/users\/redmoon\/\" class=\"user_link\">Redmoon<\/a> \u2014 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435 (\u043d\u0435 \u043f\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c), <a href=\"http:\/\/habrahabr.ru\/users\/strelok369\/\" class=\"user_link\">strelok369<\/a> \u2014 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435 (\u043d\u0435 \u043f\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c), <a href=\"http:\/\/habrahabr.ru\/users\/agath\/\" class=\"user_link\">Agath<\/a> \u2014 \u043f\u043e\u0437\u0436\u0435 \u0434\u0435\u0434\u043b\u0430\u0439\u043d\u0430, <a href=\"http:\/\/habrahabr.ru\/users\/vadimmm\/\" class=\"user_link\">vadimmm<\/a> \u2014 \u043f\u043e\u0437\u0436\u0435 \u0434\u0435\u0434\u043b\u0430\u0439\u043d\u0430, <a href=\"http:\/\/habrahabr.ru\/users\/jwriter\/\" class=\"user_link\">jwriter<\/a> \u2014 \u043f\u043e\u0437\u0436\u0435 \u0434\u0435\u0434\u043b\u0430\u0439\u043d\u0430, <a href=\"http:\/\/habrahabr.ru\/users\/xio4\/\" class=\"user_link\">xio4<\/a> \u2014 \u043f\u043e\u0437\u0436\u0435 \u0434\u0435\u0434\u043b\u0430\u0439\u043d\u0430, <a href=\"http:\/\/habrahabr.ru\/users\/vadosm\/\" class=\"user_link\">VadosM<\/a> \u2014 \u043f\u043e\u0437\u0436\u0435 \u0434\u0435\u0434\u043b\u0430\u0439\u043d\u0430, <a href=\"http:\/\/habrahabr.ru\/users\/oleksandr17\/\" class=\"user_link\">oleksandr17<\/a> \u2014 \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438.<\/p>\n<p>  \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u043d\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0430, \u0438\u0445 \u043e\u0442\u0432\u0435\u0442\u044b \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u2014 <a href=\"http:\/\/s.14.by\/wayray-solutions-mistakes.zip\">\u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442<\/a><\/p>\n<h1>\u041e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435<\/h1>\n<p>\u0411\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 24 \u0447\u0430\u0441\u0430 \u2014 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c\u0438 \u043c\u043e\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u0435 \u0441\u043e\u043c\u043d\u0435\u0432\u0430\u044e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u0415\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0435\u0433\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0444\u0438\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0432\u0440\u0443\u0447\u0435\u043d\u0438\u044e \u043f\u0440\u0438\u0437\u043e\u0432.    \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\/company\/wayray\/blog\/222815\/\"> http:\/\/habrahabr.ru\/company\/wayray\/blog\/222815\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/d19\/67e\/f16\/d1967ef164a3824ed8be8cb0da2e8387.jpg\" align=\"right\"\/>\u0418\u0442\u0430\u043a, \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u0432\u0435\u0441\u0442\u0438 \u0438\u0442\u043e\u0433\u0438 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0435\u0433\u043e \u043c\u0430\u0439\u0441\u043a\u043e\u0433\u043e <a href=\"http:\/\/habrahabr.ru\/company\/wayray\/blog\/222279\/\">\u0445\u0430\u0431\u0440\u0430\u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u044f<\/a>. \u0411\u044b\u043b\u043e \u043f\u0440\u0438\u0441\u043b\u0430\u043d\u043e 49 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043f\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044e \u0438 8 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432\u043d\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0430 (\u043f\u043e\u0437\u0436\u0435 \u0434\u0435\u0434\u043b\u0430\u0439\u043d\u0430, \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f, \u043d\u0430 \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441). \u0427\u0442\u043e-\u0436, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0442\u043e \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b.<\/p>\n<p>  \u0425\u043e\u0442\u044f \u0432 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430 \u0441 \u0441\u0430\u043c\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043b\u044e\u0434\u0438 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u043b\u0438, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0435 \u0438 \u0441\u0430\u043c\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438, \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f <a href=\"http:\/\/habrahabr.ru\/users\/lany\/\" class=\"user_link\">lany<\/a> \u2014 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0441\u0430\u043c\u044b\u043c \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u043c \u0432\u0441\u0435\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 <a href=\"http:\/\/habrahabr.ru\/users\/frommi\/\" class=\"user_link\">Frommi<\/a> \u0431\u044b\u043b\u043e \u0432\u0434\u0432\u043e\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0435\u0435, 863 \u0431\u0430\u0439\u0442\u0430 \u2014 \u043d\u043e \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 <a href=\"http:\/\/habrahabr.ru\/users\/ibessonov\/\" class=\"user_link\">ibessonov<\/a> \u043d\u0430 1613 \u0431\u0430\u0439\u0442\u0430 \u2014 \u043d\u043e \u043e\u043d\u043e \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0442\u0435\u0441\u0442\u0435. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u043c\u0435\u043d\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0443\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<ol>\n<li><a href=\"http:\/\/habrahabr.ru\/users\/lany\/\" class=\"user_link\">lany<\/a> \u2014 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c, 89.9448 \u0431\u0430\u043b\u043b\u043e\u0432 \u0438 \u0441\u0430\u043c\u043e\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. <br \/>  \u0421\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0435\u0441\u0442 (2.4\u0413\u0431) \u043f\u0440\u043e\u0439\u0434\u0435\u043d \u0437\u0430 0.61 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. <br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">\/\/@lany public class G{java.io.InputStream I=System.in;int c,i=0,j,m,M;double[]S=new double[512],C=new double[512];byte[]P=&quot;111001100011101101&quot;.getBytes(),d=new byte[999999];double N=4.0678884e13,L=29.9792458,X,Y,q,F,G,H=1e99;S[]z;S f,g;class S{double x,y,r,q,R,Q;S(){x=new Double(l());y=new Double(l());try{I.read(d);I.skip(9000001);}catch(Exception e){}q=L*o()+L\/2;Q=q*q;r=q-L;R=r*r;l();}int o(){int o=0,p;for(;;o+=10){for(p=0;p&lt;18;p++)if(P[p]!=d[o+p*10])break;if(p==18){while(d[--o]&gt;48);return o+1;}}}}void u(double X,double Y){if(X*X+Y*Y&lt;N){double S=d(X,Y);if(S&lt;H){H=S;F=X;G=Y;}}}double d(double x,double y){double q=0,Q=-1,X,Y;for(S s:z){X=x-s.x;Y=y-s.y;X=X*X+Y*Y;if(X&gt;s.Q)q+=X-s.Q;else if(X&lt;s.R)q+=s.R-X;else if(q==0){Y=Math.sqrt(X);Q*=Math.min(s.q-Y,Y-s.r)*.1;}}return q&gt;0?q:Q;}void b(double r,double R){if(r+R&gt;q){double d=Math.abs(r*r-R*R+q*q)\/2\/q,h=Math.sqrt(r*r-d*d),x=f.x+X*d,y=f.y+Y*d;u(x-Y*h,y+X*h);u(x+Y*h,y-X*h);}}String l(){char[]o=new char[99];int p=0,b;try{while((b=I.read())!=10)o[p++]=(char)b;}catch(Exception e){}return new String(o,0,p).trim();}public static void main(String[]a){new G();}G(){for(;i&lt;512;i++){q=Math.PI*i\/256;S[i]=Math.sin(q);C[i]=Math.cos(q);}c=new Short(l());z=new S[c];for(i=0;i&lt;c;)z[i++]=new S();for(i=1;i&lt;c&#038;&H&gt;0;i++)for(j=0;j&lt;i&#038;&H&gt;0;j++){f=z[i];g=z[j];X=g.x-f.x;Y=g.y-f.y;q=Math.sqrt(X*X+Y*Y);X\/=q;Y\/=q;b(f.q,g.q);b(f.r,g.q);b(f.q,g.r);b(f.r,g.r);}double x=F,y=G,r=d(x,y),t=r&lt;1e10?1e3:3e6,u,v,w,R;while(t&gt;.1&#038;&(i++&lt;999||r&gt;0)){R=r;X=x;Y=y;for(M=4;M&lt;513&#038;&R==r;M*=2){for(m=0;m&lt;M;m++)if(M&lt;5||m%2&gt;0){j=m*512\/M;u=x+S[j]*t;v=y+C[j]*t;if(u*u+v*v&lt;N){w=d(u,v);if(w&lt;R){X=u;Y=v;R=w;}}}}if(R&lt;r){x=X;y=Y;r=R;}else t\/=2;}System.out.println(x+&quot; &quot;+y);}}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/users\/akashta\/\" class=\"user_link\">AKashta<\/a> \u2014 86.9558 \u0431\u0430\u043b\u043b\u0430, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0442\u0435\u0441\u0442\u0435 \u0432\u0434\u0432\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 <a href=\"http:\/\/habrahabr.ru\/users\/lany\/\" class=\"user_link\">lany<\/a>, \u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u043b \u043f\u043e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438.<br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">\/\/@AKashta  import java.io.*; import java.util.ArrayList;  public class Main {      public static final boolean ADVANCED_MODE = true;     public static final int MAX_POINTS = 50;     public static final double PRECISION = 30;     public static final int THRESHOLD = 300;      public static final String START_TOKEN = &quot;111001100011101101&quot;;     public static final long DATA_LENGTH = 10000000;     public static final long SPEED = 299792458;     public static final long EARTH_R = 6378000;     public static final long MIN_SAT_POS = 10000000;     public static final long MAX_SAT_POS = 20000000;     public static final int MIN_OFFSET = (int)((MIN_SAT_POS - EARTH_R) * DATA_LENGTH \/ SPEED);     public static final int MAX_OFFSET = (int)((MAX_SAT_POS + EARTH_R) * DATA_LENGTH \/ SPEED);      public static void main(String args[ ]) {         \/\/long startTime = System.currentTimeMillis();         try {             DataInputStream in = new DataInputStream(System.in);             DataReader reader = new DataReader(in);             Point result = null;              int q = reader.readInt();             ArrayList&lt;Circle&gt; sats = new ArrayList&lt;Circle&gt;(q);             for(int i = 0; i &lt; Math.min(q, MAX_POINTS); i++) {                 double x = reader.readDouble();                 double y = reader.readDouble();                 int offset = reader.readOffset();                  double radius = ((double)SPEED \/ DATA_LENGTH * offset);                  sats.add(new Circle(new Point(x, y),  radius));             }              if(sats.size() == 2) {                 ArrayList&lt;Point&gt; points = sats.get(0).intersect(sats.get(1));                 for(Point p : points) {                     result = p;                     break;                 }             }  else {                 if(ADVANCED_MODE) {                     result = advancedCalc(sats);                 } else {                     result = simpleCalc(sats);                 }             }              System.out.println(result.x + &quot; &quot; + result.y);             \/\/long time = (System.currentTimeMillis() - startTime);             \/\/System.out.println(&quot;Time: &quot; + time);         } catch (Exception e) {             System.out.println(e.getMessage());         }     }      public static Point findRefPoint(ArrayList&lt;Circle&gt; sats){         ArrayList&lt;Point&gt; points = new ArrayList&lt;Point&gt;();         for(int i = 0; i &lt; 2; i++) {             for(int j = i + 1; j &lt; 3; j++) {                 points.addAll(sats.get(i).intersect(sats.get(j)));             }         }          Point p0 = null, p1 = null, p2 = null;         for(Point p : points) {             for(Point t : points) {                 if(p1 == null &#038;& t != p &#038;& p.distance(t) &lt; THRESHOLD){                     p1 = t;                     continue;                 }                 if(p1 != null &#038;& t != p &#038;& t != p1 &#038;& p.distance(t) &lt; THRESHOLD){                     p2 = t;                     break;                 }             }             if(p1 != null &#038;& p2 != null) {                 p0 = p;                 break;             } else {                 p1 = null;                 p2 = null;             }         }         return new Point((p0.x + p1.x + p2.x) \/ 3, (p0.y + p1.y + p2.y) \/ 3);     }      public static Point advancedCalc(ArrayList&lt;Circle&gt; sats){         ArrayList&lt;Point&gt; allPoints = new ArrayList&lt;Point&gt;();         for(int i = 0; i &lt; sats.size() - 1; i++) {             for(int j = i + 1; j &lt; sats.size(); j++) {                 allPoints.addAll(sats.get(i).intersect(sats.get(j)));             }         }          int count = 0;         double sumX = 0;         double sumY = 0;          for(Point p : allPoints) {             boolean containsInAll = true;             for (Circle sat : sats){                 if(!sat.hasPoint(p)) {                     containsInAll = false;                     break;                 }             }             if(containsInAll) {                 count++;                 sumX += p.x;                 sumY += p.y;             }         }         return new Point(sumX \/ count, sumY \/ count);     }      public static Point simpleCalc(ArrayList&lt;Circle&gt; sats){         int count = 0;         double sumX = 0;         double sumY = 0;          Point refPoint = findRefPoint(sats);         for(int i = 0; i &lt; sats.size() - 1; i++) {             for(int j = i + 1; j &lt; sats.size(); j++) {                 for(Point p : sats.get(i).intersect(sats.get(j))) {                     if(refPoint.distance(p) &lt; THRESHOLD) {                         count++;                         sumX += p.x;                         sumY += p.y;                     }                 }             }         }         return new Point(sumX \/ count, sumY \/ count);     }      public static class DataReader {         private DataInputStream _in;          public DataReader(DataInputStream in){             _in = in;         }          public int readOffset() throws Exception {             byte firstByte = _in.readByte();             int offset = 1;             while( _in.readByte() == firstByte) {                 offset++;             }             int needToSkip = ((MIN_OFFSET - offset) \/ 10) * 10;             _in.skipBytes(needToSkip);             offset += needToSkip;              byte[] buffer = new byte[MAX_OFFSET - offset];             _in.read(buffer);             _in.skipBytes((int) DATA_LENGTH - offset - buffer.length - 1 + 2);              StringBuilder sb = new StringBuilder(buffer.length \/ 10);             for(int i = 0; i &lt; buffer.length \/ 10; i++ ){                 sb.append((char) buffer[i * 10]);             }              int index = sb.indexOf(START_TOKEN)* 10;              return index + offset;         }          public String readLine() throws Exception {             StringBuilder sb = new StringBuilder();             char c;             while((c = (char)_in.readByte()) != '\\r') {                 sb.append(c);             }             _in.readByte(); \/\/ read '\\n' char             return  sb.toString();         }          public int readInt() throws Exception {             String s = readLine();             return Integer.parseInt(s);         }          public Double readD<\/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-222815","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/222815","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=222815"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/222815\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=222815"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=222815"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=222815"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}