def printmodel(sheep, owners, primes):
	for n in sheep:
		if n in primes:
			print "black(%d)" % n
	for n in sheep:
		if n not in primes:
			print "white(%d)" % n
	
	for n in owners:
		for m in sheep:
			if m > 2*n and m % n != 0:
				print "owner(%d, %d)" % (n, m)


def transformmodel(sheep, owners, primes, nonprimes):
	#every second sheep
	for a in list(sheep)[::2]:
		if a in primes:
			#black
			sheep.add(set(primes - sheep).pop())
		else:	
			#white
			sheep.add(set(nonprimes - sheep).pop())

# standard prime sieve
def sieve(bound):
        candidates = set(range(3, int(bound), 2))
        a = 3
        while a < bound:
                while a not in candidates and a < bound:
                        a += 2
                n = a
                while n < bound:
                        n += a
                        candidates.discard(n)
                a += 2

        candidates.add(2)
        return candidates

#main
bound = 15
sheep = set(range(1, 20))
owners = set(range(1, 10))

primes = sieve(2*bound)
nonprimes = set(range(2*bound)) - primes

printmodel(sheep, owners, primes)
transformmodel(sheep, owners, primes, nonprimes)
print "after transform"
printmodel(sheep, owners, primes)
