package com.algobase.accounts;

import java.util.List;
import java.util.ArrayList;
import java.util.Locale;


class Polyline {

public class Point { 
  int lat;
  int lon;

  public Point(int lat,int lon) { this.lat = lat; this.lon = lon; }

  int getLatE6() { return lat; }
  int getLonE6() { return lon; }

  double getLat() { return ((double)lat)/1E6; }
  double getLon() { return ((double)lon)/1E6; }

/*
  public String toString() {
    return String.format(Locale.US,"lat=%.5f,lon=%.5f\n",getLat(),getLon());
  }
*/
}


  String code;
  int curPos;


  public Polyline(String s) {
     code = s;
     curPos = 0;
  }

  int nextValue()
  { 
    int shift = 0; 
    int result = 0;
    int b = 0;

    do { b = code.charAt(curPos) - 63;
         result |= (b & 0x1f) << shift;
         shift += 5;
         curPos++;
    } while (b >= 0x20);
  
    int sign = result & 1;
    result >>= 1;
    return (sign == 0) ? result : ~result;
  }
  
  
  public List<Point> decode() 
  {
    List<Point> poly = new ArrayList<Point>();
    int lat = 0; 
    int lng = 0;
  
    curPos = 0;
  
    while (curPos < code.length())
    { lat += nextValue();
      lng += nextValue();
  
      Point p = new Point((int) (((double)lat/1E5) * 1E6),
                          (int) (((double)lng/1E5) * 1E6));
      poly.add(p);
    }
  
    return poly;
  }

}
