- import random 
-   
- A = [0,7,8,15,16,23,24,31] 
- B = [1,2,3,4,5,6,25,26,27,28,29,30,9,17,22] 
- C = [10,11,12,13,14,18,19,20,21] 
-   
- if any(b in A for b in B) or any(c in A or c in B for c in C): 
-     raise RuntimeError('not valid input') 
-   
-   
- def sample_k(k): 
-     ret = [] 
-     counter = 0 
-     for _ in range(k): 
-         # select a group 
-         v = random.random() 
-         if v < .5: 
-             g = A 
-         elif v < .95: 
-             g = B 
-         else: 
-             g = C 
-   
-         while True: 
-             # select a num 
-             v = random.choice(g) 
-             counter += 1 
-             if v not in ret[-6:]: 
-                 ret.append(v) 
-                 break 
-     return ret, counter 
-   
-   
- seq, count = sample_k(100000) 
-   
- print('accept rate:', float(len(seq)) / count) 
-   
- sets = [set(A), set(B), set(C)] 
- group_count = [0] * 3 
-   
- for v in seq: 
-     for i, s in enumerate(sets): 
-         if v in s: 
-             group_count[i] += 1 
-             break 
-   
- group_prob = [float(p) / len(seq) for p in group_count] 
- print(group_prob) 
-   
				aW1wb3J0IHJhbmRvbQogCkEgPSBbMCw3LDgsMTUsMTYsMjMsMjQsMzFdCkIgPSBbMSwyLDMsNCw1LDYsMjUsMjYsMjcsMjgsMjksMzAsOSwxNywyMl0KQyA9IFsxMCwxMSwxMiwxMywxNCwxOCwxOSwyMCwyMV0KCmlmIGFueShiIGluIEEgZm9yIGIgaW4gQikgb3IgYW55KGMgaW4gQSBvciBjIGluIEIgZm9yIGMgaW4gQyk6CiAgICByYWlzZSBSdW50aW1lRXJyb3IoJ25vdCB2YWxpZCBpbnB1dCcpCiAKIApkZWYgc2FtcGxlX2soayk6CiAgICByZXQgPSBbXQogICAgY291bnRlciA9IDAKICAgIGZvciBfIGluIHJhbmdlKGspOgogICAgICAgICMgc2VsZWN0IGEgZ3JvdXAKICAgICAgICB2ID0gcmFuZG9tLnJhbmRvbSgpCiAgICAgICAgaWYgdiA8IC41OgogICAgICAgICAgICBnID0gQQogICAgICAgIGVsaWYgdiA8IC45NToKICAgICAgICAgICAgZyA9IEIKICAgICAgICBlbHNlOgogICAgICAgICAgICBnID0gQwoKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAjIHNlbGVjdCBhIG51bQogICAgICAgICAgICB2ID0gcmFuZG9tLmNob2ljZShnKQogICAgICAgICAgICBjb3VudGVyICs9IDEKICAgICAgICAgICAgaWYgdiBub3QgaW4gcmV0Wy02Ol06CiAgICAgICAgICAgICAgICByZXQuYXBwZW5kKHYpCiAgICAgICAgICAgICAgICBicmVhawogICAgcmV0dXJuIHJldCwgY291bnRlcgogCiAKc2VxLCBjb3VudCA9IHNhbXBsZV9rKDEwMDAwMCkKCnByaW50KCdhY2NlcHQgcmF0ZTonLCBmbG9hdChsZW4oc2VxKSkgLyBjb3VudCkKCnNldHMgPSBbc2V0KEEpLCBzZXQoQiksIHNldChDKV0KZ3JvdXBfY291bnQgPSBbMF0gKiAzCgpmb3IgdiBpbiBzZXE6CiAgICBmb3IgaSwgcyBpbiBlbnVtZXJhdGUoc2V0cyk6CiAgICAgICAgaWYgdiBpbiBzOgogICAgICAgICAgICBncm91cF9jb3VudFtpXSArPSAxCiAgICAgICAgICAgIGJyZWFrCgpncm91cF9wcm9iID0gW2Zsb2F0KHApIC8gbGVuKHNlcSkgZm9yIHAgaW4gZ3JvdXBfY291bnRdCnByaW50KGdyb3VwX3Byb2IpCg==