Clean and fast Java solution
\n\tprivate static final long MAX_SUFFIX = 1000000000000L;\n    private static final int MAX_PREFIX = 100000;\n    \n    public String abbreviateProduct(int lef
```\n\tprivate static final long MAX_SUFFIX = 1000000000000L;\n    private static final int MAX_PREFIX = 100000;\n    \n    public String abbreviateProduct(int left, int right) {\n        long product = 1;\n        int trailingZeros = 0;\n        double prefix = 1.0;\n        \n        for (int num = left; num <= right; num++) {\n            product *= num;\n            while (product % 10 == 0) {\n                product /= 10;\n                trailingZeros++;\n            }\n            \n            if (product >= MAX_SUFFIX) {\n                product %= MAX_SUFFIX;\n            }\n            \n            prefix *= num;\n            \n            while (prefix >= MAX_PREFIX) {\n                prefix /= 10;\n            }\n        }\n        return buildAbbreviation(prefix, product, trailingZeros);\n    }\n    \n    private String buildAbbreviation(double prefix, long product, int trailingZeros) {\n        String suffix = String.valueOf(product);\n        if (suffix.length() > 10) {\n            suffix = (int)prefix + "..." + suffix.substring(suffix.length() - 5);\n        }\n        \n        return String.format("%se%d", suffix, trailingZeros);\n    }\n```\n\nHopefully code is self explanatory. But if you need explanation, reply below and I\'ll send the video link. \nThank you!\n
[]