import java.text.DecimalFormat;
import java.text.Normalizer;

public class Main {
    private static String toCodes(final String str) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); ++i) {
            sb.append('\\');
            sb.append('u');
            String hex = Integer.toHexString(str.charAt(i));
            for (int j = 4 - hex.length(); j-- > 0;) {
                sb.append('0');
            }
            sb.append(hex);
        }
        return new String(sb);
    }

    private static void normalize(final String str) {
        System.out.println();
        System.out.println("From\t" + str + '\t' + toCodes(str));
        for (Normalizer.Form form: Normalizer.Form.values()) {
            String normalized = Normalizer.normalize(str, form);
            System.out.println(
                form + "\t" + normalized + '\t' + toCodes(normalized));
        }
    }

    public static void main(final String[] args) {
        DecimalFormat format = new DecimalFormat("#");
        format.setMaximumFractionDigits(20);
        System.out.println(format.format(1234567890123456L));
        System.out.println(format.format(1234567890123456d));
        System.out.println(format.format(1234567890123.456d));
        System.out.println(format.format(1234567890.123456d));

        normalize("\u00c1");
        normalize("\u0041\u0301");
        normalize("\ufb03");
        normalize("ﬀ");
        normalize("й");
        normalize("\u0438\u0306");
        normalize("å");
    }
}