#include <Wt/WResource>
#include <cmath>
#include <string>
#include <cstdlib>

using namespace std;
using namespace Wt;


double factorial(double N){

  if(N==1){

    return 1;

  } else {

    return N*factorial(N-1);

  }

}


class serveFactorial: public WResource {


  protected:

    virtual void handleRequest(const Http::Request& request, Http::Response& response);


};

void serveFactorial::handleRequest(const Http::Request& request, Http::Response& response){

  response.setMimeType("text/plain");

  try{

    double N=stod(request.queryString());

    if(N<0){

      response.out()<<-1;

    } else {

      response.out()<<factorial(N);

    }

  } catch (const invalid_argument&){

    response.out() << false;

  }

}
