fork(1) download
def allChars(a):
  return sum([ord(_) for _ in a])
#======================

things=raw_input()#'stol stul dverj krovatj kompjuter'
corrupts=raw_input()#'vatjkrotulsredvjlostkompterju'

print 'Initial:'
print things
print corrupts,'\n-----------------------------\n'

thingArr=things.split(' ')
thingLen=list(set([len(_) for _ in thingArr]))
thingDict={allChars(_):[0,_] for _ in thingArr}

i=0;j=0
while i<len(corrupts):
  for l in thingLen:
    if allChars(corrupts[i:i+l]) in thingDict:
      thingDict[allChars(corrupts[i:i+l])][0]=j
      i+=l;j+=1
      break

thingResult=[_[1] for _ in sorted(thingDict.values())]

i=0;corruptResult=[]
for l in [len(_) for _ in thingResult]:
  corruptResult.append(corrupts[i:i+l])
  i+=l

print 'Final:'
print ' '.join(thingResult)
print ' '.join(corruptResult)

Success #stdin #stdout 0.01s 7900KB
stdin
abab ab ba
ababaabb
stdout
Initial:
abab ab ba
ababaabb 
-----------------------------

Final:
ba abab
ab abaa