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]; 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(); 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; } int maxHB = maxHB(); if (maxHB == 505 || maxHB == 514 || maxHB == 523 || maxHB == 532 || maxHB == 541) { for (int i = candidiates.size() - 1; i >= 0; i--) { String candidiate = candidiates.get(i); if (hb(candidiate, q) == 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) { 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) { 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) { 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) { 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) { 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); } } q = candidiates.remove(candidiates.size() - 1); } } } } } } } } } 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++) { if (s.charAt(i) == t.charAt(i)) { h++; } } 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; for (int i = 0; i < h.length; i++) { int hb = 100 * (h[i] + b[i]) + 10 * h[i] + b[i]; if (hb != 550) { max = Math.max(max, hb); } } return max; } 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; } }