defip_addresses(numbers): size ={0:12,1:9,2:6,3:3,4:0} ip =[] valid_ips =[]defdfs(level=0, numbers=None):iflen(numbers)> size[level]or(level==0andlen(numbers)<4):returnif level ==4: valid_ips.append(''.join(ip[:-1]))for i inrange(1,min(4,len(numbers)+1)): part = numbers[0:i]ifint(part)<=255and(len(part)==1or part[0]!='0'):# If is not len = 1, then len 2 or 3, so the fist digit can be 0 ip.append(part) ip.append('.') dfs(level +1, numbers=numbers[i:]) ip.pop() ip.pop() dfs(level=0, numbers=numbers)return valid_ips