package main

import (
	"strconv"
	"strings"
)

/**
 *
 * @param s string字符串
 * @return string字符串一维数组
 */
func restoreIpAddresses( s string ) []string {
    if len(s)<4||len(s)>12{return nil}
    result:=[]string{}
    ip:=[]string{}
    for i:=0;i<3;i++{
        if isRange(s[:i+1]){
            ip=[]string{s[:i+1]}
            result=append(result, bt(s[i+1:],1,ip)...)
        }
    }
    return result
}

func bt(s string,level int,ip []string)[]string{
    if len(s)==0{return nil}
    if level==3{
        if isRange(s){
            ip=append(ip, s)
            return []string{strings.Join(ip,".")}
        }else{
            return nil
        }
    }
    result:=[]string{}
    for i:=0;i<3&&i<len(s);i++{
        if isRange(s[:i+1]){
            ip=append(ip,s[:i+1])
            result=append(result, bt(s[i+1:],level+1,ip)...)
            ip=ip[:len(ip)-1]
        }
    }
    return result
}

func isRange(s string)bool{
    if len(s)>3{return false}
    if len(s)>1&&s[0]=='0'{return false}
    num,_:=strconv.Atoi(s)
    return num>=0&&num<=255
}