#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void printV(vector<T>& a) {
  for (int i = 0; i < ((int)((a).size())); i++) {
    cout << a[i] << " ";
  }
  cout << "\n";
}
template <typename T>
inline void printV(vector<T>& a, int n) {
  for (int i = 0; i < n; i++) {
    cout << a[i] << " ";
  }
  cout << "\n";
}
template <typename T>
inline void printVV(vector<vector<T>>& a) {
  for (int i = 0; i < ((int)((a).size())); i++) {
    printV(a[i]);
  }
  cout << "\n";
}
template <typename T>
inline void clearVV(vector<vector<T>>& a) {
  for (auto& x : a) {
    x.clear();
  }
  a.clear();
}
template <typename T>
inline void assignVV(vector<vector<T>>& a, T val) {
  for (int i = 0; i < ((int)((a).size())); i++) {
    for (int j = 0; j < ((int)((a[i]).size())); j++) {
      a[i][j] = val;
    }
  }
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const long double eps = LDBL_EPSILON;
const int inf = 5e8;
const int modn = 1e9 + 7;
const int MAX = 1e5;
vector<pair<int, int>> ans;
void pairsets(set<int>& st1, set<int>& st2) {
  int cnt = min(((int)((st1).size())), ((int)((st2).size())));
  vector<int> rst1, rst2;
  auto it1 = st1.begin();
  auto it2 = st2.begin();
  while (cnt) {
    ans.push_back(make_pair(*it1, *it2));
    rst1.push_back(*it1);
    rst2.push_back(*it2);
    it1++, it2++;
    cnt--;
  }
  for (int num : rst1) {
    st1.erase(num);
  }
  for (int num : rst2) {
    st2.erase(num);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  string left, right;
  cin >> left >> right;
  vector<set<int>> lfreq(27);
  vector<set<int>> rfreq(27);
  for (int i = 0; i < n; i++) {
    if (left[i] == '?') {
      lfreq[26].insert(i);
    } else {
      lfreq[left[i] - 'a'].insert(i);
    }
    if (right[i] == '?') {
      rfreq[26].insert(i);
    } else {
      rfreq[right[i] - 'a'].insert(i);
    }
  }
  for (int i = 0; i < 26; i++) {
    pairsets(lfreq[i], rfreq[i]);
  }
  set<int> leftchar, leftq, rightchar, rightq;
  for (int i = 0; i < 26; i++) {
    for (int num : lfreq[i]) {
      leftchar.insert(num);
    }
    for (int num : rfreq[i]) {
      rightchar.insert(num);
    }
  }
  for (int num : lfreq[26]) {
    leftq.insert(num);
  }
  for (int num : rfreq[26]) {
    rightq.insert(num);
  }
  pairsets(leftchar, rightq);
  pairsets(leftq, rightchar);
  pairsets(leftq, rightq);
  cout << ans.size() << "\n";
  for (auto p : ans) {
    cout << p.first + 1 << " " << p.second + 1 << "\n";
  }
  return 0;
}
