public static int fillTableVerbose(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.
		//msg.println("endVal="+endVal);
		while(cri*cci<=endVal){
			bestChoice=0;
			//msg.println("cri="+cri+" cci="+cci);
			//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
				//msg.println("letters did match and caddy was my choice");
				val=1;
			}
			else if(let1!=let2&&bestChoice==caddy){//only care about the match/mismatch if bestChoice=caddy, NO GAP
				//msg.println("letters did NOT match and bestChoice was caddy");
				val=-1;//mismatch penalty
			}
			else{
				val=0;//gap
			}
	
	//		msg.println("comparing "+let1+" and "+let2);
	//		msg.println("up="+up);
	//		msg.println("left="+left);
	//		msg.println("caddy="+caddy);
	//		msg.println("bestChoice was"+bestChoice);
	//		msg.println("val is "+val);
			table[cri][cci]=val+bestChoice;//val of match/mismatch + caddy, up-2 or left-2
			
			if(cri*cci>=endVal){break;}
			if(cri==rows-1){//last row
				cri=1;//back to top of table
				cci++;//move over 1 column
			}
			else{
				cri++;//increment current row index;
			}
			printBoard(table);
		}
		msg.println("score="+(val+bestChoice)+"\nFinal board: \n");
		printBoard(table);		
		return val+bestChoice;//final allignment score
	}