Problem:
Grading

Write a program which reads a list of student test scores and evaluates the performance for each student.

The test scores for a student include scores of the midterm examination m (out of 50), the final examination f (out of 50) and the makeup examination r (out of 100). If the student does not take the examination, the score is indicated by -1.

The final performance of a student is evaluated by the following procedure:

If the student does not take the midterm or final examination, the student's grade shall be F.

If the total score of the midterm and final examination is greater than or equal to 80, the student's grade shall be A.

If the total score of the midterm and final examination is greater than or equal to 65 and less than 80, the student's grade shall be B.

If the total score of the midterm and final examination is greater than or equal to 50 and less than 65, the student's grade shall be C.

If the total score of the midterm and final examination is greater than or equal to 30 and less than 50, the student's grade shall be D. However, if the score of the makeup examination is greater than or equal to 50, the grade shall be C.

If the total score of the midterm and final examination is less than 30, the student's grade shall be F.

Input

The input consists of multiple datasets. For each dataset, three integers m, f and r are given in a line.

The input ends with three -1 for m, f and r respectively. Your program should not process for the terminal symbols.

The number of datasets (the number of students) does not exceed 50.

Output

For each dataset, print the grade (A, B, C, D or F) in a line.

Sample Input

40 42 -1
20 30 -1
0 2 -1
-1 -1 -1

Sample Output

A
C
F

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		String input = "";
		String[] input_data = new String[3]; // 入力された中間、期末、再テストの得点を一時的にString型で格納する配列
		int MAX_DATA = 50;
		int data_count = 0;
		int m = 0; // 中間テストの得点
		int f = 0; // 期末テストの得点
		int r = 0; // 再テストの得点
		int sum = 0; // 中間テストと期末テストの合計の得点
		boolean judge = true; // 入力されたデータが条件範囲内に収まっているかを判定するための変数

		String[] output = new String[MAX_DATA];

		out: for (int i = 0; i < MAX_DATA; i++) {
			input = sc.nextLine();
			input_data = input.split(" ");
			sum = 0;
			m = Integer.parseInt(input_data[0]);
			f = Integer.parseInt(input_data[0]);
			r = Integer.parseInt(input_data[0]);

			// 入力の終わりを示しているのかのチェック
			if (m == -1 && f == -1 && r == -1) {
				break out;
			}

			// 中間試験の得点が条件範囲内に収まっているかのチェック
			if (m < -1 && m > 50) {
				judge = false;
				break out;
			}

			// 期末試験の得点が条件範囲内に収まっているかのチェック
			if (f < -1 && f > 50) {
				judge = false;
				break out;
			}

			// 再試験の得点が条件範囲内に収まっているかのチェック
			if (r < -1 && r > 100) {
				judge = false;
				break out;
			}
			data_count++; // 入力値に問題がなければデータを1つカウントする

			// 成績の判定
			sum = m + f;
			if (m == -1 || f == -1) {
				output[i] = "F";
			} else if (m + f >= 80) {
				output[i] = "A";
			} else if ((sum >= 65 && sum < 80)) {
				output[i] = "B";
			} else if (sum >= 50 && sum < 65) {
				output[i] = "C";
			} else if (sum >= 30 || sum < 50) {
				output[i] = "D";
				if (r >= 50) {
					output[i] = "C";
				}

			} else {
				output[i] = "F";
			}

		} // out: for文ここまで
		if (judge == true) {
			for (int j = 0; j < data_count; j++) {
				System.out.println(output[j]);

			}
		}

	}
}