implementation of SOM