#!/usr/bin/python3

import sys, math
from ortools.constraint_solver import pywrapcp

solver = pywrapcp.Solver("...")

limit=10**8
a = solver.IntVar(0, 9, "a")
b = solver.IntVar(0, 9, "b")
c = solver.IntVar(0, 9, "c")
d = solver.IntVar(0, 9, "d")
e = solver.IntVar(0, 9, "e")
f = solver.IntVar(0, 9, "f")
N = solver.IntVar(2, limit, "N")

solver.Add(a>=0)
solver.Add(b>=0)
solver.Add(c>=0)
solver.Add(d>=0)
solver.Add(e>=0)
solver.Add(f>=0)
solver.Add(N==a*100000 + b*10000 + c*1000 + d*100 + e*10 + f)

# a**4 isn't supported by ortools

# 4th powers:
#solver.Add(a*a*a*a + b*b*b*b + c*c*c*c + d*d*d*d + e*e*e*e + f*f*f*f == N)

# 5th powers:
solver.Add(a*a*a*a*a + b*b*b*b*b + c*c*c*c*c + d*d*d*d*d + e*e*e*e*e + f*f*f*f*f== N)

solution = solver.Assignment()

db = solver.Phase([a,b,c,d,e,f,N], solver.CHOOSE_MIN_SIZE_LOWEST_MAX,
                  solver.ASSIGN_MIN_VALUE)

solver.NewSearch(db)
while solver.NextSolution():
    print (a,b,c,d,e,f,N)
solver.EndSearch()

