public static ArrayList<String> finiteQueue(ArrayList<Double> parameters, int type)
	{
		ArrayList<String> output = new ArrayList<String>();
	
		double lambda = parameters.get(INFINITE_LAMBDA);
		double s0 = parameters.get(S0);
		double w = parameters.get(W);

		double mu = 0.0;
		if(type != MU)
			mu = 1/s0;
		else
			mu = s0;

		output.add(finiteQueueOutputStrings[0] + ": " + round(mu));
		output.add(finiteQueueOutputStrings[8] + ": " + round(1/mu));

		double p0 = (1 - (lambda/mu)) / (1 - Math.pow((lambda/mu), (w+1)));
		output.add(finiteQueueOutputStrings[1] + ": " + round(p0));

		for(int k = 1; k < w+1; k++)
			output.add("P" + (int)(k) + ": " + round(p0*Math.pow((lambda)/(mu), k)));

		double u = (1-p0);
		output.add(finiteQueueOutputStrings[4] + ": " + round(u) + " (" + round(u*100) + "%)");

		double n = 0.0;
		if(w > LARGE_W)
		{
			double a = lambda / mu;
			n = p0*((w*Math.pow(a, w+2))-((w+1)*Math.pow(a, w+1))+(a))/(Math.pow((1-a), 2));
		}
		else
		{
			for(int k = 0; k < w; k++)
				n += k*p0*Math.pow((lambda/mu), k);
		}
		output.add(finiteQueueOutputStrings[5] + ": " + round(n));

		double x = u*mu;
		output.add(finiteQueueOutputStrings[6] + ": " + round(x));

		double r = n/x;
		output.add(finiteQueueOutputStrings[7] + ": " + round(r));		

		return output;
	}