### The power of symmetry

• 2. People love symmetry They find symmetrical faces more attractive
• 3. Mathematicians are just like people :) They too love symmetry
• 4. This is Johann Carl Friedrich Gauss (1777-1855) He used symmetry to sum the numbers from 1 to 100
• 5. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 Suppose you have to sum these guys How would you do that?
• 6. You could do this… Is this a smart solution? 1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+ 17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+3 6+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55 +56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+ 75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+9 4+95+96+97+98+99+100
• 10. Remember Gauss? He could do it with only 2 operations, using symmetry That’s me! 1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+ 17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+3 6+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55 +56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+ 75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+9 4+95+96+97+98+99+100
• 11. 1+2+3+4+5+ … +95+96+97+98+99+100 Let’s position the numbers a bit differently Now we can ‘see’ the symmetry
• 12. 1+2+3+4+5+ … +95+96+97+98+99+100 It’s like there’s a mirror in the middle! This way we can make 50 groups op two 1+100 = 101 2+99 = 101 3+98 = 101
• 13. 1+2+3+4+5+ … +95+96+97+98+99+100 50 groups of 101 -> 50 * (100 + 1) = 5050 With only 2 operations! 1+100 = 101 2+99 = 101 3+98 = 101
• 15. Start loving symmetry already? I do!
• 16. Let’s have a look at the next problem Concerning a shepherd, a sheep, a wolf and a cabbage
• 17. And a river, which they have to cross And a boat. But, the boat can only carry the shepherd plus one item
• 18. So he takes either the sheep with him, or the wolf or the cabbage Ow, and one more thing
• 19. When left alone (without the shepherd present) The wolf will eat the sheep, and the sheep will eat the cabbage
• 20. Can we get the entire party safely to the other side?
• 21. Lets make a diagram representing the shepherds choices Initially, all are at the right side of the river |HSCW
• 22. So let’s place the whole party right of the | The shepherd (his name is Hank), the Sheep, the Wolf and the Cabbage |HSCW
• 23. Now what can Hank do? He can take either one of the three items with him |HSCW HC|SW HS | CW HW | SC
• 24. However, remember Wolf eats sheep, sheep eats cabbage |HSCW HC|SW HS | CW HW | SC
• 25. So these two options are no good! |HSCW HC|SW HS | CW HW | SC
• 26. Now Hank is at the left side of the river, he only has one choice Going back alone (Taking the sheep gets him back where he started) |HSCW HC|SW S | HCW HW | SCHS | CW
• 27. So what’s next? He can take either the wolf or the cabbage |HSCW HC|SW S | HCW HW | SCHS | CW HSC | W HSW | C
• 28. Can you finish this diagram? 0|HSCW HC|SW S | HCW HW | SCHS | CW HSC | W HSW | C
• 29. Come on, try it yourself! 0|HSCW HC|SW S | HCW HW | SCHS | CW HSC | W HSW | C
• 30. Okay, here is it  |HSCW HC|SW S|HCW HW|SCHS|CW HSC|W HSW|C SC|HW C|HSW W|HSC SW|HC HSC|W HWC|S WC|SH WCHS| HSW|CHWC|S WC|SH WCHS|
• 31. See how symmetrical it is? |HSCW HC|SW S|HCW HW|SCHS|CW HSC|W HSW|C SC|HW C|HSW W|HSC SW|HC HSC|W HWC|S WC|SH WCHS| HSW|CHWC|S WC|SH WCHS|
• 32. It doesn’t matter what we choose at the yellow point Which means: it doesn’t matter whether we take the wolf or the cabbage |HSCW HC|SW S|HCW HW|SCHS|CW HSC|W HSW|C SC|HW C|HSW W|HSC SW|HC HSC|W HWC|S WC|SH WCHS| HSW|CHWC|S WC|SH WCHS|
• 33. We see this symmetry now in the diagram Could we have notice this before? |HSCW HC|SW S|HCW HW|SCHS|CW HSC|W HSW|C SC|HW C|HSW W|HSC SW|HC HSC|W HWC|S WC|SH WCHS| HSW|CHWC|S WC|SH WCHS|
• 34. Lets go back to the original problem: Wolf eats sheep, sheep eats cabbage
• 35. If we were to model this problem We might come up with something this
• 36. But is this necessary? All that matters is sheep can’t be with wolfs and cabbages
• 37. Who eats who… Is irrelevant!
• 38. So let’s try modeling the problem again!
• 39. We have a shepherd, a sheep, Plus two things that we shouldn’t combine with sheep
• 40. Lets call them anti-sheep (A) It we construct the diagram now, it is way more simple
• 41. See how little choice there is? We reduced the state space (# states) by half |HSAA HA|SA S|HAA HS|AA HAS|A SA|HA A|HSA HAS|A HAA|S AA|SH AAHS|
• 42. See how little choice there is? We reduced the state space (# states) by half |HSAA HA|SA S|HAA HS|AA HAS|A SA|HA A|HSA HAS|A HAA|S AA|SH AAHS| Symmetry for the win!
• 43. So next time when you are modeling something, be aware of antisheep Don’t overmodel
• 44. The symmetric solution was invented by this guy Edsger W. Dijkstra, a Dutch computer scientist Edsger W. Dijkstra – Pruning the search tree http://www.cs.utexas.edu/users/EWD/transcriptions/EWD12xx/EWD1255.html
• 45. So far we’ve see how symmetry can help in solving problems Of course seeing this symmetry is not always easy
• 46. But if you practice a little, you start seeing it everywhere Let’s try another problem!
• 47. Finding the greatest common divisor (gcd) of two numbers
• 48. Given two numbers A en B Determine the maximum number x, that divides both A en B 6 12
• 49. For instance 6 and 12 2, 3 and 6 all divide both numbers, but 6 is the largest 6 12
• 50. But how do we calculate the gcd of larger numbers? We could try all numbers up to 105 105 252
• 51. Can we do better? Using symmetry? 105 252
• 52. So let’s search for a problem that is smaller But can be solved in the same way 105 252
• 53. Rephrasing our problem definition We search for an x that ‘fits’ into both A and B 105 = x * z 252 = x * y
• 54. But we don’t really care about how often x fit in A and B Remember: be aware of antisheep! 105 = x * z 252 = x * y
• 55. So how can we reduce this problem? While keeping it similar? 105 = x * z 252 = x * y
• 56. Well, we could subtract Now we again have two numbers in which x fits nicely, but smaller! 105 = x * z - 252 = x * y 147 = x * (y-z)
• 57. Now we can continue with 105 and 147 And again have two numbers in which x fits nicely, but smaller! 105 = x * z - 147 = x * y 42 = x * (y-z)
• 58. You can check yourself that within 5 steps we reach the answer That’s way better that 105 steps. Thanks to… 105 = 5 * 21 252 = 21 * 21
• 59. Symmetry! Wanna try it with a new problem?
• 60. Suppose you’re going on a backpacking trip And you need to decide what items to bring with you
• 61. For example: Food, a towel, a first aid kit and entertainment
• 62. Each item has a certain weight and a value But we cannot take all of them, we can only carry three kilos Weight Value 1 2 2 1 1 3 3 4
• 63. How to decide on the maximum value we can bring? Weight Value 1 2 2 1 1 3 3 4
• 64. Like before, we could make a decision tree For each item, we can either take it (left arrow) or leave it (right arrow) Start W:1 V:2 W:0 V:0 W:3 V:3 W:1 V:2 W:2 V:1 W:0 V:0 Weight Value 1 2 2 1 1 3 3 4
• 65. Is that a smart move? Well for four items it is okay, we have to create 16 path (2 ^ 4) Start W:1 V:2 W:0 V:0 W:3 V:3 W:1 V:2 W:2 V:1 W:0 V:0 Weight Value 1 2 2 1 1 3 3 4
• 66. However: 2^n is not a sweet formula!! For 10 items, we already have more than 1000 (1024) paths Weight Value 1 2 2 1 1 3 3 4
• 67. Like before, we want to find a smaller problem That we can solve similar to the ‘big’ problem
• 68. Suppose this rectangle is an empty backpack
• 69. If we put one item is, what we in fact have left is…
• 70. If we put one item is, what we in fact have left is… A smaller backpack!
• 71. With this idea we are going to solve the problem: We put an item in the backpack, and continue with a smaller one
• 72. But we are cheating a little bit, Since we don’t know beforehand which items to take
• 73. Therefore, we need a table listing all values for smaller backpack From those values, we can calculate the end result
• 74. We calculate the maximum value to be obtained For each weight (horizontal) choosing from a certain list of items (vertical) W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 Items up to 1 Items up to 2 Items up to 3 Items up to 4
• 75. This way, the final solution can be found in the lower right corner Since there we can choose from all items, carrying weight 3 W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 Items up to 1 Items up to 2 Items up to 3 Items up to 4
• 76. So how to fill this nice table? Some values are very easy to figure out. Do you know some? W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 Items up to 1 Items up to 2 Items up to 3 Items up to 4
• 77. Well, if you cannot carry any weight… W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 Items up to 1 Items up to 2 Items up to 3 Items up to 4
• 78. Well, if you cannot carry any weight… You will not carry anything of value anyway W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 Items up to 1 0 Items up to 2 0 Items up to 3 0 Items up to 4 0
• 79. And if you cannot choose from any item… W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 Items up to 1 0 Items up to 2 0 Items up to 3 0 Items up to 4 0
• 80. And if you cannot choose from any item… Nothing is to be gained either W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 Items up to 2 0 Items up to 3 0 Items up to 4 0
• 81. What else is easy? Lets try the second row… W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 Items up to 2 0 Items up to 3 0 Items up to 4 0
• 82. Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 Items up to 2 0 Items up to 3 0 Items up to 4 0 With the burger only, we can never do better than value 2 Which is the value of the burger W V 1 2 2 1 1 3 3 4
• 83. Now for the remainder of the second row In the yellow box we have: items up to 2, max weight 1 W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 Items up to 3 0 Items up to 4 0
• 84. What can we do? We can’t take the towel, since it weights 2 So there’s no option, but just sticking with the burger (value 2) W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 Items up to 3 0 Items up to 4 0
• 85. Let’s do one more! Now we can choose from the first three items W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 Items up to 3 0 Items up to 4 0
• 86. So now we could also take the mushroom. It has weight 1, so at least it fits W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 Items up to 3 0 Items up to 4 0
• 87. But is this better? Well… What we have now is value 2, and the mushroom is worth 3 W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 Items up to 3 0 Items up to 4 0
• 88. But is this better? Well… What we have now is value 2, and the mushroom is worth 3 W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 Items up to 3 0 Items up to 4 0
• 89. So let’s ditch the burger, and go for the mushrooms Than our maximum value is 3, and that is obviously better than 2. W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 Items up to 3 0 3 Items up to 4 0
• 90. This way, we can fill the entire table W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 2 3 Items up to 3 0 3 3 3 Items up to 4 0 3 3 5
• 91. To calculate the values, we secretly used a recurrence relation This means describing a value in the table with other values in the table W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 2 3 Items up to 3 0 3 3 3 Items up to 4 0 3 3 5
• 92. Let’s call the table T. T has two dimensions, i (items) and w(weight) Here we highlight T[2,1], indicating items up to 2, maximum weight 1 W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 2 3 Items up to 3 0 3 3 3 Items up to 4 0 3 3 5
• 93. How can we calculate this value T[2,1]? In stead of reasoning about it as we did before? W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 2 3 Items up to 3 0 3 3 3 Items up to 4 0 3 3 5
• 94. Well what did we do before? We said: Since the towel does not fit, we stick with the burger W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 2 3 Items up to 3 0 3 3 3 Items up to 4 0 3 3 5
• 95. if wi < w (the new item is too heavy) then T[i,w] = T[i-1,w] (we stick with what we already have) W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 2 3 Items up to 3 0 3 3 3 Items up to 4 0 3 3 5
• 96. Now, let’s have a look at what we did at T[3,1] We said: It fits, and now we have value 2, and the mushrooms is worth 3 W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 2 3 Items up to 3 0 3 3 3 Items up to 4 0 3 3 5
• 97. if wi <= w (this new item fits) then T[i,w] = Max (T[i-1,w], T[i-1-w-wi]+vi) (we check if we can do better) W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 2 3 Items up to 3 0 3 3 3 Items up to 4 0 3 3 5
• 98. To perform this calculation, we only need n2 operations In stead of 2n Okay, in this case both are 16, but you get the idea :) W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 2 3 Items up to 3 0 3 3 3 Items up to 4 0 3 3 5
• 99. Again, we reduced complexity by seeing the symmetry! W V 1 2 2 1 1 3 3 4 Max. value Max weight:0 Max weight:1 Max weight:2 Max weight:3 Items up to 0 0 0 0 0 Items up to 1 0 2 2 2 Items up to 2 0 2 2 3 Items up to 3 0 3 3 3 Items up to 4 0 3 3 5
• 100. So let’s do one little more problem
• 101. Calculating all prime numbers Did you know they were named after this guy?
• 102. Okay they weren’t, but he does makes a nice background Prime numbers are numbers only divisible by 1 and itself 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
• 103. So how do we know what’s a prime number and what’s not? We could check all divisors, per number. 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
• 104. But that could take up to the root of each number Lets use symmetry, and find a smaller problem like this one. 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
• 105. Suppose we already have a number that’s prime. Say 2. What do we know now? 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
• 106. A hint: It is something about every multiple of two… 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
• 107. Exactly, they are not primes! Since they have 2 as a divisor 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
• 108. We have eliminated half of the numbers (Okay we have infinitely many left, but still…) 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
• 109. We can do the same trick with 3 Identify it as prime, and remove all numbers divisible by it 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
• 110. This way we can quickly determine all prime numbers Thanks to… 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
• 111. The power of symmetry Thanks for your attention!
• 112. The power of symmetry And remember: Try to find symmetry everywhere 2n is never fun And beware of antisheep
• 113. The power of symmetry This presentation was created by Felienne Hermans, PhD student and entrepreneur And presented at the yearly Devnology Community Day 6 november 2010 @Felienne
• 114. If you liked this presentation, you might also like these books The author of the first two is nice to follow on Twitter: @marcusdusautoy Books on symmetry (in increasing order of difficulty) General mathematical awesomeness More cool programming

### Editor's Notes

1. [NatureItem||Abstract Bool Eats(n:NatureItem)]^[Vegetable||Abstract Bool Eats(n:NatureItem)], [NatureItem]^[Animal||Abstract Bool Eats(n:NatureItem)], [Vegetable]^[Cabbage||Bool Eats(n:NatureItem)],[Animal]^[Sheep||Bool Eats(n:NatureItem)], [Animal]^[Wolf||Bool Eats(n:NatureItem)]
Current LanguageEnglish
Español
Portugues
Français
Deutsche