# einschritt.py
from java.lang import Math

def einschritt( n ):
  if (n < 1):
    raise ValueError( "Argument to einschritt must be Integer > 1" )
  elif (n == 1): 
    return [ 0 ]
  elif (n == 2):
    return [ 0, 1 ]
  else:
    n2 = int( Math.ceil( n / 2.0 ))
    p2 = int( 2 ** Math.ceil( Math.log( n2 ) / Math.log(2.0) ))
    ca = einschritt( n2 )
    cb = ca[:]
    reverseListAndAddOffset( cb, p2 )
    return ca + cb[ 0 : n/2 ]


def reverseListAndAddOffset( list, offset ):
  list.reverse()
  for i in range( len(list)):
    list[i] = list[i] + offset


if __name__ == "__main__":
  for i in range( 1, 15 ):
    x = einschritt(i)
    # print ""
    print i, " ", x
  print einschritt(128)
