#include #include constexpr size_t MAX_N = 201; int n, evaluation_value, original_evaluation_value; bool bits[MAX_N], original_bits[MAX_N], target_bits[MAX_N]; std::ostream& print_bits(const bool* bits_list = bits, std::ostream& os = std::clog) { for (int i = 0; i < n; i++) { os << (bits_list[i] ? 1 : 0); } return os; } void swap_bits(int i, int j) { if (bits[i] != target_bits[i]) { evaluation_value--; } if (bits[j] != target_bits[j]) { evaluation_value--; } std::swap(bits[i], bits[j]); if (bits[i] != target_bits[i]) { evaluation_value++; } if (bits[j] != target_bits[j]) { evaluation_value++; } } int evaluate() { if (evaluation_value == 1) { return 1; } return evaluation_value / 2; } bool dfs(int last_swap_pos = 0, int depth = 0, int target_depth = 0) { const int h = evaluate(); if (h == 0) { return true; } if (depth + h > target_depth) { return false; } std::clog << "DEPTH=" << depth << "\th=" << h << "\t"; print_bits() << "\t"; print_bits(target_bits) << std::endl; for (int i = 0; i < n - 1; i++) { if (bits[i] == bits[i + 1]) { continue; } if (i == last_swap_pos) { continue; } if (bits[i] == target_bits[i] && bits[i + 1] == target_bits[i + 1]) { continue; } if ((bits[i] == target_bits[i] || bits[i + 1] == target_bits[i + 1]) && (bits[i + 1] != target_bits[i] && bits[i] != target_bits[i + 1])) { continue; } swap_bits(bits[i], bits[i + 1]); if (dfs(i, depth + 1, target_depth)) { return true; } swap_bits(bits[i], bits[i + 1]); } return false; } int ida_star() { for (int target_depth = evaluate(); target_depth <= 2 * n; target_depth++) { memcpy(bits, original_bits, n); evaluation_value = original_evaluation_value; std::clog << "target_depth:" << target_depth << std::endl; if (dfs(-1, 0, target_depth)) { return target_depth; } } return -1; } bool init_evaluate() { int original_sum = 0, target_sum = 0; for (int i = 0; i < n; i++) { original_sum += original_bits[i]; target_sum += target_bits[i]; original_evaluation_value += original_bits[i] != target_bits[i]; } return original_sum == target_sum; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cin >> n; for (int i = 0; i < n; i++) { std::cin >> original_bits[i]; } for (int i = 0; i < n; i++) { std::cin >> target_bits[i]; } if (!init_evaluate()) { std::cout << -1 << std::endl; return 0; } std::cout << ida_star() << std::endl; return 0; }