#include <bits/stdc++.h>
using namespace std;
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n;
  cin >> n;
  string l, r;
  cin >> l >> r;
  vector<bool> is_comp_l(n, 0);
  vector<bool> is_comp_r(n, 0);
  vector<pair<long long, long long> > v;
  map<char, set<long long> > ml, mr;
  vector<long long> ques_l, ques_r;
  for (long long i = 0; l[i]; ++i) {
    if (l[i] != '?')
      ml[l[i]].insert(i);
    else
      ques_l.emplace_back(i);
    if (r[i] != '?')
      mr[r[i]].insert(i);
    else
      ques_r.emplace_back(i);
  }
  for (long long i = 0; i < 26; ++i) {
    char c = 'a' + i;
    while (ml[c].size() > 0 && mr[c].size() > 0) {
      long long a = *ml[c].begin(), b = *mr[c].begin();
      v.emplace_back(make_pair(a, b));
      ml[c].erase(a);
      mr[c].erase(b);
      is_comp_l[a] = is_comp_r[b] = 1;
    }
  }
  long long j = 0;
  for (long long i = 0; i < n && j < ques_l.size(); ++i) {
    if (r[i] != '?' && !is_comp_r[i]) {
      v.emplace_back(make_pair(ques_l[j], i));
      is_comp_l[ques_l[j++]] = is_comp_r[i] = 1;
    }
  }
  long long k = 0;
  for (long long i = 0; i < n && k < ques_r.size(); ++i) {
    if (l[i] != '?' && !is_comp_l[i]) {
      v.emplace_back(make_pair(i, ques_r[k]));
      is_comp_l[i] = is_comp_r[ques_r[k++]] = 1;
    }
  }
  for (long long i = j; i < ques_l.size() && k < ques_r.size(); ++i) {
    v.emplace_back(make_pair(ques_l[i], ques_r[k++]));
  }
  cout << v.size() << "\n";
  for (auto x : v) cout << x.first + 1 << " " << x.second + 1 << "\n";
}
