def ConvertListToElement( l) :
temp = map ( lambda a, b: a << b, l, range ( len ( l) -1 , -1 , -1 ) )
return reduce ( lambda a, b: a | b, temp)
gPrimitivePolys = { }
gPrimitivePolysCondensed = {
1 : ( 1 , 0 ) ,
2 : ( 2 , 1 , 0 ) ,
3 : ( 3 , 1 , 0 ) ,
4 : ( 4 , 1 , 0 ) ,
5 : ( 5 , 2 , 0 ) ,
6 : ( 6 , 4 , 3 , 1 , 0 ) ,
7 : ( 7 , 1 , 0 ) ,
8 : ( 8 , 4 , 3 , 2 , 0 ) ,
9 : ( 9 , 4 , 0 ) ,
10 : ( 10 , 6 , 5 , 3 , 2 , 1 , 0 ) ,
11 : ( 11 , 2 , 0 ) ,
12 : ( 12 , 7 , 6 , 5 , 3 , 1 , 0 ) ,
13 : ( 13 , 4 , 3 , 1 , 0 ) ,
14 : ( 14 , 7 , 5 , 3 , 0 ) ,
15 : ( 15 , 5 , 4 , 2 , 0 ) ,
16 : ( 16 , 5 , 3 , 2 , 0 ) ,
17 : ( 17 , 3 , 0 ) ,
18 : ( 18 , 12 , 10 , 1 , 0 ) ,
19 : ( 19 , 5 , 2 , 1 , 0 ) ,
20 : ( 20 , 10 , 9 , 7 , 6 , 5 , 4 , 1 , 0 ) ,
21 : ( 21 , 6 , 5 , 2 , 0 ) ,
22 : ( 22 , 12 , 11 , 10 , 9 , 8 , 6 , 5 , 0 ) ,
23 : ( 23 , 5 , 0 ) ,
24 : ( 24 , 16 , 15 , 14 , 13 , 10 , 9 , 7 , 5 , 3 , 0 ) ,
25 : ( 25 , 8 , 6 , 2 , 0 ) ,
26 : ( 26 , 14 , 10 , 8 , 7 , 6 , 4 , 1 , 0 ) ,
27 : ( 27 , 12 , 10 , 9 , 7 , 5 , 3 , 2 , 0 ) ,
28 : ( 28 , 13 , 7 , 6 , 5 , 2 , 0 ) ,
29 : ( 29 , 2 , 0 ) ,
30 : ( 30 , 17 , 16 , 13 , 11 , 7 , 5 , 3 , 2 , 1 , 0 ) ,
31 : ( 31 , 3 , 0 ) ,
32 : ( 32 , 15 , 9 , 7 , 4 , 3 , 0 ) ,
33 : ( 33 , 13 , 12 , 11 , 10 , 8 , 6 , 3 , 0 ) ,
34 : ( 34 , 16 , 15 , 12 , 11 , 8 , 7 , 6 , 5 , 4 , 2 , 1 , 0 ) ,
35 : ( 35 , 11 , 10 , 7 , 5 , 2 , 0 ) ,
36 : ( 36 , 23 , 22 , 20 , 19 , 17 , 14 , 13 , 8 , 6 , 5 , 1 , 0 ) ,
37 : ( 37 , 5 , 4 , 3 , 2 , 1 , 0 ) ,
38 : ( 38 , 14 , 10 , 9 , 8 , 5 , 2 , 1 , 0 ) ,
39 : ( 39 , 15 , 12 , 11 , 10 , 9 , 7 , 6 , 5 , 2 , 0 ) ,
40 : ( 40 , 23 , 21 , 18 , 16 , 15 , 13 , 12 , 8 , 5 , 3 , 1 , 0 ) ,
97 : ( 97 , 6 , 0 ) ,
100 : ( 100 , 15 , 0 )
}
for n in gPrimitivePolysCondensed.keys ( ) :
gPrimitivePolys[ n] = [ 0 ] *( n+1 )
unity = 1
for index in gPrimitivePolysCondensed[ n] :
gPrimitivePolys[ n] [ index] = unity
gPrimitivePolys[ n] .reverse ( )
print ( ConvertListToElement( gPrimitivePolys[ n] ) )
ZGVmIENvbnZlcnRMaXN0VG9FbGVtZW50KGwpOgogICAgICAgCgogICAgICAgIHRlbXAgPSBtYXAobGFtYmRhIGEsIGI6IGEgPDwgYiwgbCwgcmFuZ2UobGVuKGwpLTEsLTEsLTEpKQogICAgICAgIHJldHVybiByZWR1Y2UobGFtYmRhIGEsIGI6IGEgfCBiLCB0ZW1wKQpnUHJpbWl0aXZlUG9seXMgPSB7fQpnUHJpbWl0aXZlUG9seXNDb25kZW5zZWQgPSB7CiAgICAxICA6ICgxLDApLAogICAgMiAgOiAoMiwxLDApLAogICAgMyAgOiAoMywxLDApLAogICAgNCAgOiAoNCwxLDApLAogICAgNSAgOiAoNSwyLDApLAogICAgNiAgOiAoNiw0LDMsMSwwKSwKICAgIDcgIDogKDcsMSwwKSwKICAgIDggIDogKDgsNCwzLDIsMCksCiAgICA5ICA6ICg5LDQsMCksCiAgICAxMCA6ICgxMCw2LDUsMywyLDEsMCksCiAgICAxMSA6ICgxMSwyLDApLAogICAgMTIgOiAoMTIsNyw2LDUsMywxLDApLAogICAgMTMgOiAoMTMsNCwzLDEsMCksCiAgICAxNCA6ICgxNCw3LDUsMywwKSwKICAgIDE1IDogKDE1LDUsNCwyLDApLAogICAgMTYgOiAoMTYsNSwzLDIsMCksCiAgICAxNyA6ICgxNywzLDApLAogICAgMTggOiAoMTgsMTIsMTAsMSwwKSwKICAgIDE5IDogKDE5LDUsMiwxLDApLAogICAgMjAgOiAoMjAsMTAsOSw3LDYsNSw0LDEsMCksCiAgICAyMSA6ICgyMSw2LDUsMiwwKSwKICAgIDIyIDogKDIyLDEyLDExLDEwLDksOCw2LDUsMCksCiAgICAyMyA6ICgyMyw1LDApLAogICAgMjQgOiAoMjQsMTYsMTUsMTQsMTMsMTAsOSw3LDUsMywwKSwKICAgIDI1IDogKDI1LDgsNiwyLDApLAogICAgMjYgOiAoMjYsMTQsMTAsOCw3LDYsNCwxLDApLAogICAgMjcgOiAoMjcsMTIsMTAsOSw3LDUsMywyLDApLAogICAgMjggOiAoMjgsMTMsNyw2LDUsMiwwKSwKICAgIDI5IDogKDI5LDIsMCksCiAgICAzMCA6ICgzMCwxNywxNiwxMywxMSw3LDUsMywyLDEsMCksCiAgICAzMSA6ICgzMSwzLDApLAogICAgMzIgOiAoMzIsMTUsOSw3LDQsMywwKSwKICAgIDMzIDogKDMzLDEzLDEyLDExLDEwLDgsNiwzLDApLAogICAgMzQgOiAoMzQsMTYsMTUsMTIsMTEsOCw3LDYsNSw0LDIsMSwwKSwKICAgIDM1IDogKDM1LCAxMSwgMTAsIDcsIDUsIDIsIDApLAogICAgMzYgOiAoMzYsIDIzLCAyMiwgMjAsIDE5LCAxNywgMTQsIDEzLCA4LCA2LCA1LCAxLCAwKSwKICAgIDM3IDogKDM3LCA1LCA0LCAzLCAyLCAxLCAwKSwKICAgIDM4IDogKDM4LCAxNCwgMTAsIDksIDgsIDUsIDIsIDEsIDApLAogICAgMzkgOiAoMzksIDE1LCAxMiwgMTEsIDEwLCA5LCA3LCA2LCA1LCAyICwgMCksCiAgICA0MCA6ICg0MCwgMjMsIDIxLCAxOCwgMTYsIDE1LCAxMywgMTIsIDgsIDUsIDMsIDEsIDApLAogICAgOTcgOiAoOTcsNiwwKSwKICAgIDEwMCA6ICgxMDAsMTUsMCkKICAgIH0KCmZvciBuIGluIGdQcmltaXRpdmVQb2x5c0NvbmRlbnNlZC5rZXlzKCk6CiAgICBnUHJpbWl0aXZlUG9seXNbbl0gPSBbMF0qKG4rMSkKICAgIHVuaXR5ID0gMQogICAgZm9yIGluZGV4IGluIGdQcmltaXRpdmVQb2x5c0NvbmRlbnNlZFtuXToKICAgICAgICBnUHJpbWl0aXZlUG9seXNbbl1baW5kZXhdID0gdW5pdHkKICAgIGdQcmltaXRpdmVQb2x5c1tuXS5yZXZlcnNlKCkKcHJpbnQoQ29udmVydExpc3RUb0VsZW1lbnQoZ1ByaW1pdGl2ZVBvbHlzW25dKSk=