#![allow(non_snake_case)] #![allow(unused_imports)] #![allow(unused_macros)] #![allow(clippy::needless_range_loop)] #![allow(clippy::comparison_chain)] #![allow(clippy::nonminimal_bool)] #![allow(clippy::neg_multiply)] #![allow(dead_code)] #![allow(clippy::collapsible_else_if)] use proconio::{ fastout, input, input_interactive, marker::{Chars, Usize1}, }; use std::cmp::Reverse; use std::collections::BinaryHeap; use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet, VecDeque}; use std::mem::swap; //const MOD: usize = 1e9 as usize + 7; const MOD: usize = 998244353; // const MOD: usize = 2147483647; #[macro_export] macro_rules! max { ($x: expr) => ($x); ($x: expr, $( $y: expr ),+) => { std::cmp::max($x, max!($( $y ),+)) } } #[macro_export] macro_rules! min { ($x: expr) => ($x); ($x: expr, $( $y: expr ),+) => { std::cmp::min($x, min!($( $y ),+)) } } fn main() { input_interactive! { s0:char, } let mut first_output = String::new(); first_output.push(s0); first_output.push(s0); println!("? {}", first_output); for _ in 0..100 { input_interactive! { res1:char, res2:Chars, } if res1 == '!' { return; } let mut output = String::new(); output.push(res2[1]); output.push(s0); println!("? {}", output); } }