//
// main.cpp
// 10263 - Railway
//
// Created by Repon Macbook on 1/1/15.
// Copyright (c) 2015 Repon Macbook. All rights reserved.
//
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
#include<stack>
#include<cstdlib>
#include<algorithm>
#include<set>
#include<iterator>
#include<cassert>
#include <sstream>
#include <climits>
#include <list>
#include <string>
#include <map>
using namespace std;
/*------- Constants---- */
#define MX 31650
#define ll long long
#define ull unsigned long long
#define mod 1000000007
#define MEMSET_INF 63
#define MEM_VAL 1061109567
#define FOR(i,n) for( int i=0 ; i < n ; i++ )
#define mp(i,j) make_pair(i,j)
#define lop(i,a,b) for( int i = (a) ; i < (b) ; i++)
#define pb(a) push_back((a))
#define gc getchar_unlocked
#define EPS 1e-7
#define PI acos(-1)
#define INF 1LL<<30
struct Point {
double x,y;
bool del;
Point(){}
void scan(){
cin >> x >> y;
}
bool operator == (const Point & P) const {
if( x == P.x && y == P.y ) return true;
return false;
}
void set(double _x , double _y){x= _x ; y = _y;}
};
double TriArea2( Point a , Point b ,Point c)
{
return (.5*(a.x*(b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y) ));
}
// To find orientation of ordered triplet (p, q, r).
// The function returns following values
// 0 --> p, q and r are colinear
// 1 --> Clockwise
// 2 --> Counterclockwise
int ccw ( Point p,Point q ,Point r)
{
double val = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
if( fabs(val) < EPS) return 0;
if( val > EPS ) return 1;
else return 2 ;
}
bool onSegment( Point p , Point q ,Point r)
{
// Given three colinear points p, q, r, the function checks if
// point q lies on line segment 'pr'
if (q.x <= max(p.x, r.x) && q.x >= min(p.x, r.x) &&
q.y <= max(p.y, r.y) && q.y >= min(p.y, r.y))
return true;
return false;
}
bool isIntersect( Point p1 , Point q1 , Point p2, Point q2)
{
int o1 = ccw(p1,q1,p2);
int o2 = ccw(p1,q1,q2);
int o3 = ccw(p2, q2, p1);
int o4 = ccw(p2, q2, q1);
if(o1 != o2 && o3 !=o4) {
return true;
}
// p1, q1 and p2 are colinear and p2 lies on segment p1q1
if (o1 == 0 && onSegment(p1, p2, q1)) return true;
// p1, q1 and p2 are colinear and q2 lies on segment p1q1
if (o2 == 0 && onSegment(p1, q2, q1)) return true;
// p2, q2 and p1 are colinear and p1 lies on segment p2q2
if (o3 == 0 && onSegment(p2, p1, q2)) return true;
// p2, q2 and q1 are colinear and q1 lies on segment p2q2
if (o4 == 0 && onSegment(p2, q1, q2)) return true;
return false; // Doesn't fall in any of the above cases
}
bool isInside ( Point A , Point B, Point p)
{
if( p.x >= min(A.x , B.x) && p.x <= max(A.x ,B.x ) && p.y <= max(A.y , B.y )&& p.y >= min(A.y , B.y) ) return true;
return false;
}
double slope ( Point a , Point b)
{
if( fabs(a.x - b.x) < EPS){
return INF;
}
else return (a.y - b.y) / (a.x - b.x ) + EPS;
}
struct Line {
double a,b,c;
double slop;
Line(){}
Line ( Point A , Point B)
{
double sl = slope(A,B);
if( sl == INF) {
a = 1;
b = 0;
c = - A.x;
if(fabs(c) < EPS) c = 0;
}
else {
a = -sl;
b = 1;
c = sl * A.x - A.y;
if(fabs(c) < EPS) c = 0;
}
}
Line( double sl , Point A)
{
if( sl == INF) {
a = 1;
b = 0;
c = - A.x;
if(fabs(c) < EPS) c = 0;
}
else {
a = -sl;
b = 1;
c = sl * A.x - A.y;
if(fabs(c) < EPS) c = 0;
}
}
};
bool isParallel(Point a,Point b , Point c ,Point d)
{
// Return if ab || cd
if(fabs((a.x - b.x)*(c.y - d.y) - (a.y-b.y) *(c.x-d.x)) < EPS) return true;
return false;
}
Point intersectingPoint( Line &l1 , Line &l2)
{
// Return The (x,y) intersection of Two line L1 , L2
Point ret;
l1.c = - l1.c;
l2.c = -l2.c;
ret.x = (l1.c * l2.b - l2.c * l1.b) / ( l1.a * l2.b - l1.b *l2.a);
ret.y = (l1.a * l2.c - l2.a * l1.c) / ( l1.a *l2.b - l1.b *l2.a);
if(fabs(ret.x) < EPS ) ret.x = 0.0;
if(fabs(ret.y) < EPS ) ret.y = 0.0;
return ret;
}
double Dist (Point a, Point b)
{
// Return distance between Point a , point b
return sqrt((a.x - b.x) *( a.x - b.x) + ( a.y - b.y) *(a.y - b.y)) + EPS;
}
int main()
{
Point M , tmp ;
int N ;
double a, b ;
while (scanf("%lf %lf",&a,&b)==2 ) {
M.set(a,b);
cin >> N ;
Point pv;
double min_dst = INF;
Point ans;
for( int i = 0 ;i <= N ; i ++ ){
cin >> a >> b;
tmp.set(a, b);
if( i >= 1){
double ss = slope(pv, tmp);
if( ss == INF){
ss = 0;
}
else if( ss == 0){
ss = INF;
}
else ss = -1./ss;
Line L(ss , M);
Line AB ( tmp,pv);
Point ins = intersectingPoint(L, AB);
if(onSegment(tmp , ins, pv)){
double d = Dist(ins, M);
if(d < min_dst - EPS ){
min_dst = d;
ans = ins;
}
}
else {
double dm =Dist(M, tmp);
double dmm = Dist(M, pv);
if( dm < min_dst - EPS ){
min_dst = dm;
ans = tmp;
}
if( dmm < min_dst - EPS ){
min_dst = dmm;
ans = pv;
}
}
}
pv = tmp;
}
printf("%.4lf\n%.4lf\n",ans.x ,ans.y );
}
return 0;
}
Ly8KLy8gIG1haW4uY3BwCi8vICAxMDI2MyAtIFJhaWx3YXkKLy8KLy8gIENyZWF0ZWQgYnkgUmVwb24gTWFjYm9vayBvbiAxLzEvMTUuCi8vICBDb3B5cmlnaHQgKGMpIDIwMTUgUmVwb24gTWFjYm9vay4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KCiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxjc3RkaW8+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxzdGFjaz4KI2luY2x1ZGU8Y3N0ZGxpYj4KI2luY2x1ZGU8YWxnb3JpdGhtPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPGl0ZXJhdG9yPgojaW5jbHVkZTxjYXNzZXJ0PgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDxsaXN0PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWFwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLyotLS0tLS0tIENvbnN0YW50cy0tLS0gKi8KI2RlZmluZSBNWCAgICAgICAgICAgICAgICAgICAgICAzMTY1MAojZGVmaW5lIGxsICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZwojZGVmaW5lIHVsbCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZwojZGVmaW5lIG1vZCAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDcKI2RlZmluZSBNRU1TRVRfSU5GICAgICAgICAgICAgICA2MwojZGVmaW5lIE1FTV9WQUwgICAgICAgICAgICAgICAgIDEwNjExMDk1NjcKI2RlZmluZSBGT1IoaSxuKSAgICAgICAgICAgICAgICBmb3IoIGludCBpPTAgOyBpIDwgbiA7IGkrKyApCiNkZWZpbmUgbXAoaSxqKSAgICAgICAgICAgICAgICAgbWFrZV9wYWlyKGksaikKI2RlZmluZSBsb3AoaSxhLGIpICAgICAgICAgICAgICBmb3IoIGludCBpID0gKGEpIDsgaSA8IChiKSA7IGkrKykKI2RlZmluZSBwYihhKSAgICAgICAgICAgICAgICAgICBwdXNoX2JhY2soKGEpKQojZGVmaW5lIGdjICAgICAgICAgICAgICAgICAgICAgIGdldGNoYXJfdW5sb2NrZWQKI2RlZmluZSBFUFMgICAgICAgICAgICAgICAgICAgICAxZS03CiNkZWZpbmUgUEkgICAgICAgICAgICAgICAgICAgICAgYWNvcygtMSkKI2RlZmluZSBJTkYgICAgICAgICAgICAgICAgICAgICAxTEw8PDMwCgpzdHJ1Y3QgUG9pbnQgIHsKICAgICAgICBkb3VibGUgeCx5OwogICAgICAgIGJvb2wgZGVsOwogICAgICAgIFBvaW50KCl7fQogICAgICAgIHZvaWQgc2NhbigpewogICAgICAgICAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICB9CiAgICAgICAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3QgUG9pbnQgJiBQKSBjb25zdCB7CiAgICAgICAgICAgICAgICBpZiggeCA9PSBQLnggJiYgeSA9PSBQLnkgKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdm9pZCBzZXQoZG91YmxlIF94ICwgZG91YmxlIF95KXt4PSBfeCA7IHkgPSBfeTt9Cn07CgoKZG91YmxlIFRyaUFyZWEyKCBQb2ludCBhICwgUG9pbnQgYiAsUG9pbnQgYykKewogICAgICAgIHJldHVybiAoLjUqKGEueCooYi55IC0gYy55KSArIGIueCAqIChjLnkgLSBhLnkpICsgYy54ICogKGEueSAtIGIueSkgKSk7Cn0KCgoKCi8vIFRvIGZpbmQgb3JpZW50YXRpb24gb2Ygb3JkZXJlZCB0cmlwbGV0IChwLCBxLCByKS4KLy8gVGhlIGZ1bmN0aW9uIHJldHVybnMgZm9sbG93aW5nIHZhbHVlcwovLyAwIC0tPiBwLCBxIGFuZCByIGFyZSBjb2xpbmVhcgovLyAxIC0tPiBDbG9ja3dpc2UKLy8gMiAtLT4gQ291bnRlcmNsb2Nrd2lzZQoKCmludCBjY3cgKCBQb2ludCBwLFBvaW50IHEgLFBvaW50IHIpCnsKICAgICAgICAKICAgICAgICBkb3VibGUgdmFsID0gKHEueSAtIHAueSkgKiAoci54IC0gcS54KSAtIChxLnggLSBwLngpICogKHIueSAtIHEueSk7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgaWYoIGZhYnModmFsKSA8IEVQUykgcmV0dXJuIDA7CiAgICAgICAgaWYoIHZhbCA+IEVQUyApIHJldHVybiAgMTsKICAgICAgICBlbHNlIHJldHVybiAyIDsKICAgICAgICAKfQoKCmJvb2wgb25TZWdtZW50KCBQb2ludCBwICwgUG9pbnQgcSAsUG9pbnQgcikKewogICAgICAgIC8vIEdpdmVuIHRocmVlIGNvbGluZWFyIHBvaW50cyBwLCBxLCByLCB0aGUgZnVuY3Rpb24gY2hlY2tzIGlmCiAgICAgICAgLy8gcG9pbnQgcSBsaWVzIG9uIGxpbmUgc2VnbWVudCAncHInCiAgICAgICAgCiAgICAgICAgaWYgKHEueCA8PSBtYXgocC54LCByLngpICYmIHEueCA+PSBtaW4ocC54LCByLngpICYmCiAgICAgICAgICAgIHEueSA8PSBtYXgocC55LCByLnkpICYmIHEueSA+PSBtaW4ocC55LCByLnkpKQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGZhbHNlOwp9CgoKYm9vbCBpc0ludGVyc2VjdCggUG9pbnQgcDEgLCBQb2ludCBxMSAsIFBvaW50IHAyLCBQb2ludCBxMikKewogICAgICAgIAogICAgICAgIGludCBvMSA9IGNjdyhwMSxxMSxwMik7CiAgICAgICAgaW50IG8yID0gY2N3KHAxLHExLHEyKTsKICAgICAgICBpbnQgbzMgPSBjY3cocDIsIHEyLCBwMSk7CiAgICAgICAgaW50IG80ID0gY2N3KHAyLCBxMiwgcTEpOwogICAgICAgIAogICAgICAgIGlmKG8xICE9IG8yICYmIG8zICE9bzQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBwMSwgcTEgYW5kIHAyIGFyZSBjb2xpbmVhciBhbmQgcDIgbGllcyBvbiBzZWdtZW50IHAxcTEKICAgICAgICBpZiAobzEgPT0gMCAmJiBvblNlZ21lbnQocDEsIHAyLCBxMSkpIHJldHVybiB0cnVlOwogICAgICAgIAogICAgICAgIC8vIHAxLCBxMSBhbmQgcDIgYXJlIGNvbGluZWFyIGFuZCBxMiBsaWVzIG9uIHNlZ21lbnQgcDFxMQogICAgICAgIGlmIChvMiA9PSAwICYmIG9uU2VnbWVudChwMSwgcTIsIHExKSkgcmV0dXJuIHRydWU7CiAgICAgICAgCiAgICAgICAgLy8gcDIsIHEyIGFuZCBwMSBhcmUgY29saW5lYXIgYW5kIHAxIGxpZXMgb24gc2VnbWVudCBwMnEyCiAgICAgICAgaWYgKG8zID09IDAgJiYgb25TZWdtZW50KHAyLCBwMSwgcTIpKSByZXR1cm4gdHJ1ZTsKICAgICAgICAKICAgICAgICAvLyBwMiwgcTIgYW5kIHExIGFyZSBjb2xpbmVhciBhbmQgcTEgbGllcyBvbiBzZWdtZW50IHAycTIKICAgICAgICBpZiAobzQgPT0gMCAmJiBvblNlZ21lbnQocDIsIHExLCBxMikpIHJldHVybiB0cnVlOwogICAgICAgIAogICAgICAgIHJldHVybiBmYWxzZTsgLy8gRG9lc24ndCBmYWxsIGluIGFueSBvZiB0aGUgYWJvdmUgY2FzZXMKICAgICAgICAKfQoKYm9vbCBpc0luc2lkZSAoIFBvaW50IEEgLCBQb2ludCBCLCBQb2ludCBwKQp7CiAgICAgICAgaWYoIHAueCA+PSBtaW4oQS54ICwgQi54KSAgJiYgcC54IDw9IG1heChBLnggLEIueCApICYmIHAueSA8PSBtYXgoQS55ICwgQi55ICkmJiBwLnkgPj0gbWluKEEueSAsIEIueSkgKSByZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7Cn0KCmRvdWJsZSBzbG9wZSAoIFBvaW50IGEgLCBQb2ludCBiKQp7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgaWYoIGZhYnMoYS54IC0gYi54KSA8IEVQUyl7CiAgICAgICAgICAgICAgICByZXR1cm4gSU5GOwogICAgICAgIH0KICAgICAgICBlbHNlIHJldHVybiAoYS55IC0gYi55KSAvIChhLnggLSBiLnggKSArIEVQUzsKfQoKCnN0cnVjdCBMaW5lICB7CiAgICAgICAgCiAgICAgICAgZG91YmxlIGEsYixjOwogICAgICAgIGRvdWJsZSBzbG9wOwogICAgICAgIExpbmUoKXt9CiAgICAgICAgTGluZSAoIFBvaW50IEEgLCBQb2ludCBCKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGRvdWJsZSBzbCA9IHNsb3BlKEEsQik7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmKCBzbCA9PSBJTkYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBjID0gLSBBLng7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZihmYWJzKGMpIDwgRVBTKSBjID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYSA9IC1zbDsKICAgICAgICAgICAgICAgICAgICAgICAgYiA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzbCAqIEEueCAtIEEueTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmFicyhjKSA8IEVQUykgYyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgTGluZSggZG91YmxlIHNsICwgUG9pbnQgQSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiggc2wgPT0gSU5GKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBiID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgYyA9IC0gQS54OwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmFicyhjKSA8IEVQUykgYyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAtc2w7CiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBjID0gc2wgKiBBLnggLSBBLnk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZhYnMoYykgPCBFUFMpIGMgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfTsKCgpib29sIGlzUGFyYWxsZWwoUG9pbnQgYSxQb2ludCBiICwgUG9pbnQgYyAsUG9pbnQgZCkKewogICAgICAgIC8vIFJldHVybiBpZiBhYiB8fCBjZAogICAgICAgIAogICAgICAgIGlmKGZhYnMoKGEueCAtIGIueCkqKGMueSAtIGQueSkgLSAoYS55LWIueSkgKihjLngtZC54KSkgPCBFUFMpIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAKICAgICAgICAKfQoKClBvaW50IGludGVyc2VjdGluZ1BvaW50KCBMaW5lICZsMSAsIExpbmUgJmwyKQp7CiAgICAgICAgCiAgICAgICAgLy8gUmV0dXJuIFRoZSAoeCx5KSBpbnRlcnNlY3Rpb24gb2YgVHdvIGxpbmUgTDEgLCBMMgogICAgICAgIAogICAgICAgIAogICAgICAgIFBvaW50IHJldDsKICAgICAgICBsMS5jID0gLSBsMS5jOwogICAgICAgIGwyLmMgPSAtbDIuYzsKICAgICAgICByZXQueCA9IChsMS5jICogbDIuYiAtIGwyLmMgKiBsMS5iKSAvICggbDEuYSAqIGwyLmIgLSBsMS5iICpsMi5hKTsKICAgICAgICByZXQueSA9IChsMS5hICogbDIuYyAtIGwyLmEgKiBsMS5jKSAvICggbDEuYSAqbDIuYiAtIGwxLmIgKmwyLmEpOwogICAgICAgIAogICAgICAgIGlmKGZhYnMocmV0LngpIDwgRVBTICkgcmV0LnggPSAwLjA7CiAgICAgICAgaWYoZmFicyhyZXQueSkgPCBFUFMgKSByZXQueSA9IDAuMDsKICAgICAgICByZXR1cm4gcmV0Owp9Cgpkb3VibGUgRGlzdCAoUG9pbnQgYSwgUG9pbnQgYikKewogICAgICAgIC8vIFJldHVybiBkaXN0YW5jZSBiZXR3ZWVuIFBvaW50IGEgLCBwb2ludCBiCiAgICAgICAgcmV0dXJuIHNxcnQoKGEueCAtIGIueCkgKiggYS54IC0gYi54KSArICggYS55IC0gYi55KSAqKGEueSAtIGIueSkpICsgRVBTOwp9CgoKaW50IG1haW4oKQp7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgUG9pbnQgTSAsIHRtcCA7CiAgICAgICAgaW50IE4gOwogICAgICAgIGRvdWJsZSBhLCBiIDsKICAgICAgICB3aGlsZSAoc2NhbmYoIiVsZiAlbGYiLCZhLCZiKT09MiApIHsKICAgICAgICAgICAgICAgIE0uc2V0KGEsYik7CiAgICAgICAgICAgICAgICBjaW4gPj4gTiA7CiAgICAgICAgICAgICAgICBQb2ludCBwdjsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZG91YmxlIG1pbl9kc3QgPSBJTkY7CiAgICAgICAgICAgICAgICBQb2ludCBhbnM7CiAgICAgICAgICAgICAgICBmb3IoIGludCBpID0gMCA7aSA8PSBOIDsgaSArKyApewogICAgICAgICAgICAgICAgICAgICAgICBjaW4gPj4gYSA+PiBiOwogICAgICAgICAgICAgICAgICAgICAgICB0bXAuc2V0KGEsIGIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggaSA+PSAxKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3MgID0gc2xvcGUocHYsIHRtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHNzID09IElORil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIHNzID09IDApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3MgPSBJTkY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc3MgPSAtMS4vc3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSBMKHNzICwgTSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSBBQiAoIHRtcCxwdik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnQgaW5zICA9IGludGVyc2VjdGluZ1BvaW50KEwsIEFCKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihvblNlZ21lbnQodG1wICwgaW5zLCBwdikpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGQgPSBEaXN0KGlucywgTSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkIDwgbWluX2RzdCAtIEVQUyApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fZHN0ID0gZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zID0gaW5zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkbSA9RGlzdChNLCB0bXApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRtbSA9IERpc3QoTSwgcHYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGRtIDwgbWluX2RzdCAtIEVQUyApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fZHN0ID0gZG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFucyA9IHRtcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBkbW0gPCBtaW5fZHN0IC0gRVBTICl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9kc3QgPSBkbW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFucyA9IHB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBwdiA9IHRtcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgcHJpbnRmKCIlLjRsZlxuJS40bGZcbiIsYW5zLnggLGFucy55ICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICAgIAp9Cgo=