import java.util.*;
import java.lang.*;
import java.math.*;

class Main {
    
    public enum Distance {
        METER (new BigDecimal("1.0")), // Base Unit is METER
        KM(new BigDecimal("1E3")),
        CM(new BigDecimal("1E-2"));
        
        private final static MathContext MC = new MathContext(30, RoundingMode.HALF_EVEN);
        
        public static long convert(long value, Distance originalUnit, Distance resultingUnit) {
            return resultingUnit.fromBaseUnit(originalUnit.toBaseUnit(value));
        }
    
        private final BigDecimal conversionRatio;

        Distance(BigDecimal conversionRatio) {
            this.conversionRatio = conversionRatio;
        }
    
        private long fromBaseUnit(BigDecimal baseUnit) {
            return baseUnit.divide(conversionRatio, MC).longValue();
        }
    
        // returns BigDecimal to avoid rounding two times
        // and possible division by zero
        private BigDecimal toBaseUnit(long originalUnit) {
            return BigDecimal.valueOf(originalUnit).multiply(conversionRatio);
        }
    } 

    public static void main (String[] args) throws java.lang.Exception {
        System.out.println("2450 m in km is " + Distance.convert(2450, Distance.METER, Distance.KM));
        System.out.println("178 m in cm is " + Distance.convert(178, Distance.METER, Distance.CM));
        System.out.println("550 cm in m is " + Distance.convert(550, Distance.CM, Distance.METER));
        System.out.println("1 km in cm is " + Distance.convert(1, Distance.KM, Distance.CM));
    }
}