import random

    class hackysacker:
        counter = 0
        turns = 0
        def __init__(self, name, circle, scheduler):
            self.name = name
            self.circle = circle
            circle[self.name] = self
            self.message = None
            self.scheduler = scheduler

        def incrementCounter(self):
            hackysacker.counter += 1
            if hackysacker.counter >= hackysacker.turns:
                for player_id in self.circle:
                    self.circle[player_id].message = 'exit'
                    self.scheduler.append(self.circle[player_id])
                return False
            return True

        def mainloop(self):
            circle_len = len(self.circle)
            while 1:
                if not self.message:
                    yield None
                    continue

                if self.message == "exit":
                    debugPrint("%s is going home" % self.name)
                    self.circle.pop(self.name)
                    yield None

                debugPrint("%s got it from %s" % (self.name, self.message.name))
                kickTo = self.circle.get(str(random.randint(0,circle_len-1)))
                debugPrint("%s kicking hackeysack to %s"%(self.name,kickTo.name))
                if self.incrementCounter():
                    kickTo.message = self
                    self.scheduler.append(kickTo)
                    if not kickTo is self:
                        self.message = None
                yield None

    def debugPrint(x):
        if DEBUG:
            print x

    DEBUG=1

    def runit(hs=10,ts=10,dbg=1):
        global DEBUG

        hackysackers = hs
        turns = ts
        DEBUG = dbg

        hackysacker.counter = 0
        hackysacker.turns = turns
        circle = {}
        scheduler = []

        for i in range(hackysackers):
            hackysacker(`i`, circle, scheduler)

        circle['2'].message = circle['1']
        circle['2'].mainloop().next()

        while circle:
            scheduler.pop(0).mainloop().next()


    if __name__=="__main__":
        timed = 1
        if timed:
            loops = 10
            players = 1000
            turns = 1000

            import timeit
            setup = ("import hackysack\n")

            t = timeit.Timer("hackysack.runit(%i,%i,0)"%(players, turns),setup)

            print "%.2f msec/pass." % (1000 * t.timeit(number=loops)/loops),
            print "%i loops, %i players, %i turns/game."%(loops,players,turns)
        else:
            runit(1000,1000,0)
    ##    raw_input("enter to close")