import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param param string字符串 
     * @return string字符串
     */
    public String compressString(String param) {
        // write code here

        // 一些特殊情况的处理
        if (0 == param.length() || 1 == param.length()) {
            return param;
        }

        int len = param.length(); // 定义一个整型变量,用于存放 param 的长度
        int p = 1; // 定义一个指针,用于指向当前所在的位置
        int account = 1; // 定义一个整型变量,用于存放当前位置上的字符连续出现的次数
        char chr = param.charAt(0); // 定义一个变量,用于存放临时的字符
        StringBuffer sb = new StringBuffer(""); // 定义一个 StringBuffer,用于存放最终的返回结果

        while (p < len) { // 不能越界
            char tmp = param.charAt(p); // 获取 p 指针指向的当前位置上的字符
            if (tmp == chr) {
                account++; // 如果当前位置上的字符和它的前一个字符相等,那么 account++
                p++; // 同时,p 指针向后移动一位
            } else { // 如果当前位置上的字符和它的前一个字符不相等,那么就要将它的前一个字符及其出现次数加入到 StringBuffer 中
                if (account == 1) {
                    sb.append(chr); // 如果前一个字符出现的次数为 1,那么直接将字符加入到 StringBuffer 中即可
                } else {
                    sb.append(chr);
                    sb.append(account);
                }
                chr = tmp;
                account = 1;
                p++;
            }
        }
        // 别忘了,p 越界之后,将剩余的字符加入到 StringBuffer 中
        if (account == 1) {
            sb.append(chr);
        } else {
            sb.append(chr);
            sb.append(account);
        }
        return new String(sb);
    }
}