private ArrayList<Candidate> narrowCandidates(ArrayList<Point> inputStroke, ArrayList<Candidate> candidates) {
		// 残った候補を入れる配列
		ArrayList<Candidate> resultCandidates = new ArrayList<Candidate>();
		int inputStrokeLen = inputStroke.size();
		int candidatesLen = candidates.size();
		double inputStrokeFirstX = inputStroke.get(0).getX();
		double inputStrokeFirstY = inputStroke.get(0).getY();
		double inputStrokeLastX = inputStroke.get(inputStrokeLen - 1).getX();
		double inputStrokeLastY = inputStroke.get(inputStrokeLen - 1).getY();
		for (int i = 0; i < candidatesLen; ++i) {
			// 候補を取り出す
			Candidate candidate = candidates.get(i);
			DictionaryItem candidateStrokes = candidate.c;
			int candidateStrokesLen = candidateStrokes.getStrokesLen();	// -1は文字名の分
			for (int j = 0; j < candidateStrokesLen; ++j) {
				int[][] candidateStroke = candidateStrokes.d[j];	// 候補の(j+1)画目
				int candidateStrokeLen = candidateStroke.length;
				// あまりにも特徴点の数が違えばスルー
				if (!IGNORE_STROKE_LEN && Math.abs(inputStrokeLen - candidateStrokeLen) > 3) {
					continue;
				}
				// 1画の始点同士の距離を算出
				int[] candidateStrokeFirst = candidateStroke[0];
				//FIXME:(int)
				double dx = candidateStrokeFirst[0] - inputStrokeFirstX;
				double dy = candidateStrokeFirst[1] - inputStrokeFirstY;
				double d1 = (dx * dx + dy * dy);
				if (d1 > 90 * 90)
					continue;
				// 1画の終点同士の距離を算出
				int[] candidateStrokeLast = candidateStroke[candidateStrokeLen - 1];
				//FIXME: (int)
				dx = candidateStrokeLast[0] - inputStrokeLastX;
				dy = candidateStrokeLast[1] - inputStrokeLastY;
				double d2 = (dx * dx + dy * dy);
				if (d2 > 90 * 90) 
					continue;
				// 入力画と候補の(j+1)画目を比較してスコア算出
				double score1 = calculateScore(inputStroke, transArray(candidateStroke));
				if (score1 < 0) 
					continue;
				// 候補の(j+1)画目と入力画を比較してスコア算出
				double score2 = calculateScore(transArray(candidateStroke), inputStroke);
				if (score2 < 0) 
					continue;
				// スコア加算
				candidate.score += (d1 + d2 + score1 + score2);
				if (SHOW_DEBUG) {
					System.out.println("candidate.score=" + candidate.score + ", d1=" + d1 + ", d2=" + d2 + ", score1=" + score1 + ", score2=" + score2);
				}
				// この候補は残しておこう
				resultCandidates.add(candidate);
				break;
			}
		}
		return resultCandidates;
	}