import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Main { private static int[] h = new int[30]; private static int[] b = new int[30]; private static int count50 = 0; public static void main(String[] args) { try { solve(); } catch (Exception e) { e.printStackTrace(); } } private static void solve() { try (Scanner in = new Scanner(System.in)) { ArrayList candidiates = generateCandidates(); ArrayList prevQ = new ArrayList<>(); ArrayList prevMaxHB = new ArrayList<>(); String q = candidiates.remove(candidiates.size() - 1); for (;;) { System.out.println(q); System.out.flush(); updateHB(in); if (h[0] == 5 && b[0] == 0) { break; } if (h[0] == -1 && b[0] == -1) { break; } if (count50 != count50()) { count50 = count50(); prevQ.clear(); prevMaxHB.clear(); } int[] is = maxHB(); int maxHB = is[0]; int max2HB = is[1]; if (maxHB == 505 || maxHB == 514 || maxHB == 523 || maxHB == 532 || maxHB == 541) { if (max2HB == 505 || max2HB == 514 || max2HB == 523 || max2HB == 532 || max2HB == 541) { prevQ.clear(); prevMaxHB.clear(); for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); if (hb(candidiate, q) == maxHB) { prevQ.add(q); prevMaxHB.add(maxHB); q = candidiate; remove(candidiates, i); break; } } } else { boolean find = false; for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); if (hb(candidiate, q) == maxHB && hbs(candidiate, prevQ, prevMaxHB)) { prevQ.add(q); prevMaxHB.add(maxHB); q = candidiate; remove(candidiates, i); find = true; break; } } if (!find) { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); if (hb(candidiate, q) == maxHB) { prevQ.add(q); prevMaxHB.add(maxHB); q = candidiate; remove(candidiates, i); break; } } } } } else { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); int hb = hb(candidiate, q); if (hb == 505 || hb == 514 || hb == 523 || hb == 532 || hb == 541) { remove(candidiates, i); } } if (maxHB == 404 || maxHB == 413 || maxHB == 422 || maxHB == 431 || maxHB == 440) { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); if (hb(candidiate, q) == maxHB) { prevQ.add(q); prevMaxHB.add(maxHB); q = candidiate; remove(candidiates, i); break; } } } else { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); int hb = hb(candidiate, q); if (hb == 404 || hb == 413 || hb == 422 || hb == 431 || hb == 440) { remove(candidiates, i); } } if (maxHB == 303 || maxHB == 312 || maxHB == 321 || maxHB == 330) { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); if (hb(candidiate, q) == maxHB) { prevQ.add(q); prevMaxHB.add(maxHB); q = candidiate; remove(candidiates, i); break; } } } else { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); int hb = hb(candidiate, q); if (hb == 303 || hb == 312 || hb == 321 || hb == 330) { remove(candidiates, i); } } if (maxHB == 202 || maxHB == 211 || maxHB == 220) { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); if (hb(candidiate, q) == maxHB) { prevQ.add(q); prevMaxHB.add(maxHB); q = candidiate; remove(candidiates, i); break; } } } else { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); int hb = hb(candidiate, q); if (hb == 202 || hb == 211 || hb == 220) { remove(candidiates, i); } } if (maxHB == 101 || maxHB == 110) { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); if (hb(candidiate, q) == maxHB) { prevQ.add(q); prevMaxHB.add(maxHB); q = candidiate; remove(candidiates, i); break; } } } else { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); int hb = hb(candidiate, q); if (hb == 101 || hb == 110) { remove(candidiates, i); } } if (maxHB == 0) { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); if (hb(candidiate, q) == maxHB) { prevQ.add(q); prevMaxHB.add(maxHB); q = candidiate; remove(candidiates, i); break; } } } else { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); int hb = hb(candidiate, q); if (hb == 0) { remove(candidiates, i); } } prevQ.add(q); prevMaxHB.add(maxHB); q = candidiates.remove(candidiates.size() - 1); } } } } } } } } } private static boolean hbs(String candidiate, ArrayList prevQ, ArrayList prevMaxHB) { for (int i = 0; i < prevQ.size(); i++) { String q = prevQ.get(i); int maxHB = prevMaxHB.get(i).intValue(); if (hb(candidiate, q) != maxHB) { return false; } } return true; } private static int count50() { int count = 0; for (int i = 0; i < h.length; i++) { if (h[i] == 5 && b[i] == 0) { count++; } } return count; } private static void remove(ArrayList candidiates, int i) { Collections.swap(candidiates, i, candidiates.size() - 1); candidiates.remove(candidiates.size() - 1); } private static void updateHB(Scanner in) { for (int i = 0; i < h.length; i++) { h[i] = in.nextInt(); b[i] = in.nextInt(); } } private static ArrayList generateCandidates() { ArrayList candidiates = new ArrayList<>(); for (int i = 0; i <= 99999; i++) { StringBuilder sb = new StringBuilder(); int v = i; for (int j = 0; j < 5; j++) { sb.append(v % 10); v /= 10; } if (valid(sb)) { candidiates.add(sb.toString()); } } Collections.shuffle(candidiates); return candidiates; } private static int hb(String s, String t) { int h = 0; int b = 0; for (int i = 0; i < 5; i++) { int j = t.indexOf(s.charAt(i)); if (i == j) { h++; } else if (j >= 0) { b++; } } // for (int i = 0; i < 5; i++) { // for (int j = 0; j < 5; j++) { // if (j == i) { // continue; // } // if (s.charAt(i) == t.charAt(j)) { // b++; // } // } // } return 100 * (h + b) + 10 * h + b; } private static int[] maxHB() { int max = 0; int max2 = 0; for (int i = 0; i < h.length; i++) { int hb = 100 * (h[i] + b[i]) + 10 * h[i] + b[i]; if (hb == 550) { continue; } if (hb > max) { max2 = max; max = hb; } else if (hb > max2) { max2 = hb; } } return new int[] { max, max2, }; } private static boolean valid(StringBuilder sb) { for (int i = 0; i < sb.length(); i++) { for (int j = i + 1; j < sb.length(); j++) { if (sb.charAt(j) == sb.charAt(i)) { return false; } } } return true; } }