public static int fillTable(int rows, int cols,int colStart,int colEnd){
		int cri=1;//current row index. begin calc at table [1][1]
		int cci=1;//current col. index
		int up,left,caddy,bestChoice=0,val=0;//the ones to look at and the one to choose.
		char let1,let2;//left and top seq letters. gene left genome top
		int endVal=(rows-1)*(cols-1);//table index starts@0.Exit at ending cell.
		while(cri*cci<=endVal){
			bestChoice=0;
			//start@table[1][1]
			up=table[cri-1][cci]-2;//does it make sense to sub constants here??? 
			left=table[cri][cci-1]-2;
			caddy=table[cri-1][cci-1];//up&left
			//charAt starts index@0
			let1=gene.charAt(cri-1);//gene on left
			let2=gen[0].charAt(cci-1);//genome on top
		
			bestChoice=Math.max(up,left);
			bestChoice=Math.max(bestChoice,caddy);//max of 3 neighbors
			if(let1==let2&&bestChoice==caddy){//Nucleotides match
				val=1;
			}
			else if(let1!=let2&&bestChoice==caddy){//only care about the match/mismatch if bestChoice=caddy, NO GAP
				val=-1;//mismatch penalty
			}
			else{
				val=0;//gap
			}
			
			table[cri][cci]=val+bestChoice;//val of match/mismatch + caddy, up-2 or left-2
			if(cri*cci>=endVal){break;}//@end
			if(cri==rows-1){//did last cell in row
				cri=1;//back to top of table
				cci++;//move over 1 column
			}
			else{
				cri++;//increment current row index;
			}
		}
		return val+bestChoice;//final allignment score
	}