public double fisher2c(){
		double p = 0;
		
		int nRows = thisMatrix.length;
		int nColumns = thisMatrix[0].length;

		int[] rowTotals = new int[nRows];
		int[] columnTotals =  new int[nColumns]; 
		for (int i=0; i<nRows; i++){
			rowTotals[i]=findSumRow(i, nColumns);
		}
		
		for (int i=0; i<nColumns; i++){
			columnTotals[i]=findSumColumn(i, nRows);
		}
		
		int N = 0;
		for (int i=0; i<rowTotals.length; i++){
			N += rowTotals[i];
		}
		
		int[] n = new int[nRows+1];
		int[] d = new int[nRows];
		int[] v = new int[nRows];
		int[] r = new int[nRows];
		
		n[0]=0;
		for (int i=1; i<n.length; i++){
			n[i]=rowTotals[i-1];
		}
		
		d[0]=0;
		v[0]=columnTotals[0];
		r[0]=N;
		
		
		this.n = n;
		this.r = r;
		this.v = v;
		this.d = d;
		this.nRows = nRows;
		this.nColumns = nColumns;
		this.columnTotals = columnTotals; 
		this.N = N;
		
		 
		this.pValues = new ArrayList<Double>();
		int level = 1;
		enumerate(level);
		
		for (int i=1; i<nRows; i++){
			d[i] = thisMatrix[i-1][0];
		}


		Double original = calculateStatistic();

		for (int i=0; i<pValues.size(); i++){
			if (pValues.get(i)<=original){
				p = p + pValues.get(i);
			}
		}

		p = (double)Math.round(p * 100000000) / 100000000;
		return p;
	}