#include <bits/stdc++.h>
using namespace std;
int main() {
  long long int n;
  cin >> n;
  string str1, str2;
  cin >> str1 >> str2;
  unordered_map<char, vector<int> > mp;
  for (int i = 0; i < n; i++) {
    mp[str2[i]].push_back(i);
  }
  vector<pair<int, int> > ans;
  set<int> s2;
  set<int> s1;
  for (int i = 0; i < n; i++) {
    if (mp.count(str1[i]) == 0 || str1[i] == '?') {
      continue;
    } else {
      int nn = mp[str1[i]].size();
      ans.push_back(make_pair(i, mp[str1[i]][nn - 1]));
      int index = mp[str1[i]][nn - 1];
      mp[str1[i]].pop_back();
      if (mp[str1[i]].size() == 0) {
        mp.erase(str1[i]);
      }
      s2.insert(index);
      s1.insert(i);
    }
  }
  vector<int> question1;
  for (int i = 0; i < n; i++) {
    if (str1[i] == '?') {
      question1.push_back(i);
    }
  }
  int xx = question1.size();
  int ii = 0;
  while (xx > 0 && ii < n) {
    if (s2.find(ii) == s2.end() && str2[ii] != '?') {
      ans.push_back(make_pair(question1[xx - 1], ii));
      s2.insert(ii);
      s1.insert(question1[xx - 1]);
      xx--;
    }
    ii++;
  }
  if (mp.count('?') != 0) {
    vector<int> question2 = mp['?'];
    int xx1 = question2.size();
    int jj = 0;
    while (jj < n && xx1 > 0) {
      if (s1.find(jj) == s1.end()) {
        ans.push_back(make_pair(jj, question2[xx1 - 1]));
        xx1--;
      }
      jj++;
    }
  }
  int yy = ans.size();
  cout << yy << endl;
  for (int i = 0; i < yy; i++) {
    cout << ans[i].first + 1 << " " << ans[i].second + 1 << endl;
  }
  return 0;
}
