def simulation():
    with app.app_context():
        data = flask.json.loads(request.data)
        root_id = data['graph']['root']['id']
        tree_dict = deserialize(root_id, data['graph'])
        sender = tree_dict[root_id]
        settings = {}
        settings.update(data['params'])
        settings.update(use_profile_spreading=data['spreading'])
        simulator = SimulationManager(sender=sender, settings=settings)
        simulator.start_simulation()
        statistics = simulator.statistics()
        response = dict(
            statistics=dict(
                votes=statistics['info'],
                replies_log=statistics['replies_log'],
                replies_number=statistics['replies_number'],
                request_number=simulator.average_request_number()-1
            ),
            replies_stats=statistics['replies_stats']
        )
        return flask.jsonify(response)