kommentteja lisatty, jotta koodia olisi helpompi lukea, keon tilavaativuus toteutettu, muita pienia muutoksia