import java.util.*;


public class Solution {

    private ArrayList<String> res = new ArrayList<>();

    /**
     * 
     * @param s string字符串 
     * @return string字符串ArrayList
     */
    public ArrayList<String> restoreIpAddresses (String s) {
        // write code here
        if (s == null || s.length() < 1) {
            return res;
        }
        dfs(s, 0, new ArrayList<>());
        return res;
    }

    private void dfs(String s, int start, List<String> list) {
        if (start == s.length() && list.size() == 4) {
            res.add(list2Ip(list));
            return;
        }
        for (int i = start; i < s.length(); i++) {
            if (i - start >= 1 && s.charAt(start) == '0') {
                break;
            }
            if (Integer.parseInt(s.substring(start, i + 1)) > 255) {
                break;
            }
            list.add(s.substring(start, i + 1));
            dfs(s, i + 1, list);
            list.remove(list.size() - 1);
        }
    }

    private String list2Ip(List<String> list) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 3; i++) {
            sb.append(list.get(i)).append(".");
        }
        sb.append(list.get(3));
        return sb.toString();
    }
}