import itertools as it
S = 'abc'
S1 = 'abcd'
S2 = 'abcde'
S3 = 'abcdef'
S4 = 'abcdefg'
def countK( f, S) :
subsets = [ ]
for r in xrange ( 1 , len ( S) + 1 ) :
subsets.extend ( [ s for s in f( S, r) ] )
return subsets
print 'number of k permutations for all k with different string lengths'
for s in ( S, S1, S2, S3, S4) :
print len ( s) , 'letters:' , len ( countK( it.permutations , s) )
print 'number of k combinations for all k with different string lengths'
for s in ( S, S1, S2, S3, S4) :
print len ( s) , 'letters:' , len ( countK( it.combinations , s) )
aW1wb3J0IGl0ZXJ0b29scyBhcyBpdAoKUyA9ICdhYmMnClMxID0gJ2FiY2QnClMyID0gJ2FiY2RlJwpTMyA9ICdhYmNkZWYnClM0ID0gJ2FiY2RlZmcnCgpkZWYgY291bnRLKGYsIFMpOgogICAgc3Vic2V0cyA9IFtdCiAgICBmb3IgciBpbiB4cmFuZ2UoMSwgbGVuKFMpICsgMSk6CiAgICAgICAgc3Vic2V0cy5leHRlbmQoW3MgZm9yIHMgaW4gZihTLCByKV0pCiAgICByZXR1cm4gc3Vic2V0cwoKcHJpbnQgJ251bWJlciBvZiBrIHBlcm11dGF0aW9ucyBmb3IgYWxsIGsgd2l0aCBkaWZmZXJlbnQgc3RyaW5nIGxlbmd0aHMnCmZvciBzIGluIChTLCBTMSwgUzIsIFMzLCBTNCk6CiAgICBwcmludCBsZW4ocyksICdsZXR0ZXJzOicsIGxlbihjb3VudEsoaXQucGVybXV0YXRpb25zLCBzKSkKCnByaW50ICdudW1iZXIgb2YgayBjb21iaW5hdGlvbnMgZm9yIGFsbCBrIHdpdGggZGlmZmVyZW50IHN0cmluZyBsZW5ndGhzJwpmb3IgcyBpbiAoUywgUzEsIFMyLCBTMywgUzQpOgogICAgcHJpbnQgbGVuKHMpLCAnbGV0dGVyczonLCBsZW4oY291bnRLKGl0LmNvbWJpbmF0aW9ucywgcykpCg==