#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
struct th {
  int first, second, third;
};
int gcd(int a, int b) {
  while (b != 0) {
    int t = b;
    b = a % b;
    a = t;
  }
  return a;
}
bool comp(th a, th b) {
  if (a.first == b.first)
    return a.second >= b.second;
  else
    return a.first > b.first;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout << setprecision(20);
  int n;
  cin >> n;
  vector<th> a(n, {0, 0});
  int left = 0, right = 0;
  cin.ignore();
  for (auto &i : a) {
    char k = cin.get();
    i.first = k == '1' ? 1 : 0;
    if (i.first) ++left;
  }
  cin.ignore();
  for (auto &i : a) {
    char k = cin.get();
    i.second = k == '1' ? 1 : 0;
    if (i.second) ++right;
  }
  for (int i = 1; i <= n; i++) a[i - 1].third = i;
  vector<int> t1, t2, t3, t4, answer;
  int k = -right, step = n / 2;
  for (int i = 0; i < n; i++) {
    if (a[i].first && a[i].second)
      t1.push_back(a[i].third);
    else if (a[i].first && !a[i].second)
      t2.push_back(a[i].third);
    else if (!a[i].first && a[i].second)
      t3.push_back(a[i].third);
    else if (!a[i].first && !a[i].second)
      t4.push_back(a[i].third);
  }
  while ((-k > step || k + (int)t2.size() + (int)t3.size() < 0) && step &&
         !t1.empty()) {
    --step;
    k += 2;
    answer.push_back(t1[0]);
    t1.erase(t1.begin());
  }
  while (k < 0 && step && !t2.empty()) {
    answer.push_back(t2[0]);
    ++k;
    t2.erase(t2.begin());
    --step;
  }
  while (k < 0 && step && !t3.empty()) {
    answer.push_back(t3[0]);
    ++k;
    t3.erase(t3.begin());
    --step;
  }
  while (step > 0 && !t4.empty()) {
    --step;
    answer.push_back(t4[0]);
    t4.erase(t4.begin());
  }
  if (step != 0 || k) {
    cout << -1;
  } else
    for (auto i : answer) cout << i << ' ';
  return 0;
}
