#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, j = 0, p, d, e, g, v, sum = 0, q = 0, u = 0, t, i, a, b, f, h, k,
         x = -1, y = 0, z = 0;
  cin >> n;
  char l[n + 1], r[n + 1];
  cin >> l >> r;
  map<int, int> mp, mp1;
  set<int> st[27], st1[27], st2, st3;
  set<int>::iterator it, it1;
  vector<int> vec, vec1, vec2;
  vector<int>::iterator it2;
  while (l[j] != 0) {
    p = l[j];
    if (l[j] == '?') {
      q = q + 1;
      vec1.push_back(j + 1);
    } else {
      st2.insert(j + 1);
      p = p - 97;
      mp[p] = mp[p] + 1;
      st[p].insert(j + 1);
    }
    j = j + 1;
  }
  j = 0;
  while (r[j] != 0) {
    p = r[j];
    if (r[j] == '?') {
      u = u + 1;
      vec2.push_back(j + 1);
    } else {
      st3.insert(j + 1);
      p = p - 97;
      mp1[p] = mp1[p] + 1;
      st1[p].insert(j + 1);
    }
    j = j + 1;
  }
  j = 0;
  while (l[j] != 0) {
    p = l[j];
    p = p - 97;
    if (mp[p] != 0 && mp1[p] != 0) {
      sum = sum + 1;
      mp[p] = mp[p] - 1;
      mp1[p] = mp1[p] - 1;
      it = st[p].begin();
      it1 = st1[p].begin();
      vec.push_back(*it);
      vec.push_back(*it1);
      st[p].erase(*it);
      st1[p].erase(*it1);
      st2.erase(*it);
      st3.erase(*it1);
    }
    j = j + 1;
  }
  e = q;
  f = u;
  if (q != 0) {
    a = st3.size();
    for (i = 0; i < q; i = i + 1) {
      if (a == 0) {
        break;
      }
      sum = sum + 1;
      b = vec1[i];
      it = st3.begin();
      vec.push_back(b);
      vec.push_back(*it);
      st3.erase(*it);
      a = st3.size();
      x = i;
      y = y + 1;
    }
  }
  p = -1;
  if (u != 0) {
    a = st2.size();
    for (j = 0; j < u; j = j + 1) {
      if (a == 0) {
        break;
      }
      sum = sum + 1;
      b = vec2[j];
      it = st2.begin();
      vec.push_back(*it);
      vec.push_back(b);
      st2.erase(*it);
      a = st2.size();
      p = j;
      z = z + 1;
    }
  }
  v = min(q - y, u - z);
  i = x + 1;
  j = p + 1;
  for (k = 1; k <= v; k = k + 1) {
    g = vec1[i];
    h = vec2[j];
    vec.push_back(g);
    vec.push_back(h);
    sum = sum + 1;
    i = i + 1;
    j = j + 1;
  }
  printf("%d\n", sum);
  for (it2 = vec.begin(); it2 != vec.end(); it2++) {
    printf("%d ", *it2);
  }
}
