private void initFirstOrderTables() 
	{
		for (int i = 0; i < len; ++i) {
			wordFvs[i] = pipe.synFactory.createWordFeatures(inst, i);
			parameters.projectU(wordFvs[i], wpU[i]);
			parameters.projectV(wordFvs[i], wpV[i]);
		}
		
		boolean nopruning = !options.pruning || pruner == null || options.learningMode == LearningMode.Basic;
		
		for (int i = 0; i < len; ++i)
			for (int j = 0; j < len; ++j) 
				if (i != j && (nopruning || arc2id[j*len+i] != -1)) {
					//FeatureVector fv = pipe.synFactory.createArcFeatures(inst, i, j);
					arcFvs[i*len+j] = pipe.synFactory.createArcFeatures(inst, i, j);
                    //arcNtScores[i*len+j] = parameters.dotProduct(arcFvs[i*len+j]) * gamma;
					arcScores[i*len+j] = parameters.dotProduct(arcFvs[i*len+j]) * gamma
									+ parameters.dotProduct(wpU[i], wpV[j], i-j) * (1-gamma);
				}
	}