import java.util.*;


public class Solution {
    /**
     * dssdgs
     * @param s string字符串
     * @return string字符串ArrayList
     */
    public ArrayList<String> restoreIpAddresses(String s) {
        // write code here
        ArrayList<String> list = new ArrayList<String>();
        if (s.length() < 4) {
            return list;
        }
        char[] chs = s.toCharArray();
        sadd(list, chs, "", 0, 1);
        return list;
    }
	//总共三个小数点,也就是四层cengshu
    public void sadd(ArrayList<String> list, char[] chs, String s, int i,
                     int cengshu) {
        if (cengshu >= 5) {
            if (i == chs.length) {
                list.add(s.substring(0, s.length() - 1));
            }
            return;
        }
        if(i >= chs.length){
            return;
        }
        cengshu++;
	  //有0时
        if (chs[i] == '0') {
            s = s + "0.";
            i++;
            sadd(list, chs, s, i, cengshu);
            return;
        }
        //截取一位数
        String s1 = s + chs[i] + ".";
        i++;
        sadd(list, chs, s1, i, cengshu);
        if (i >= chs.length) {
            return;
        }
        //二位数
        String s2 = s + chs[i - 1] + chs[i] + ".";
        i++;
        sadd(list, chs, s2, i, cengshu);
        if (i >= chs.length) {
            return;
        }
        //三位数
        String s3 = s + chs[i - 2] + chs[i - 1] + chs[i] + ".";
        if (chs[i - 2] > '2'
                || chs[i - 2] == '2' && chs[i - 1] > '5'
                || chs[i - 2] == '2' && chs[i - 1] == '5' && chs[i] > '5') {
            return;
        }
        i++;
        sadd(list, chs, s3, i, cengshu);
    }
}