#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const int inf = int(2e9);
const int _inf = -inf;
const int mod = inf + 7;
vector<int> gr1[26];
vector<int> gr2[26];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  string s1, s2;
  cin >> n >> s1 >> s2;
  vector<int> q1, q2;
  vector<int> t1, t2;
  for (int i = 0; i < n; ++i) {
    if (s1[i] == '?')
      q1.push_back(i);
    else
      gr1[s1[i] - 'a'].push_back(i);
    if (s2[i] == '?')
      q2.push_back(i);
    else
      gr2[s2[i] - 'a'].push_back(i);
  }
  vector<pair<int, int> > res;
  for (int i = 0; i < 26; ++i) {
    for (int j = 0; j < min(gr1[i].size(), gr2[i].size()); j++) {
      res.push_back(make_pair(gr1[i][j], gr2[i][j]));
    }
    for (int j = min(gr1[i].size(), gr2[i].size()); j < gr1[i].size(); ++j) {
      t1.push_back(gr1[i][j]);
    }
    for (int j = min(gr1[i].size(), gr2[i].size()); j < gr2[i].size(); ++j) {
      t2.push_back(gr2[i][j]);
    }
  }
  int f1 = q2.size() - min(t1.size(), q2.size());
  int f2 = q1.size() - min(q1.size(), t2.size());
  cout << res.size() + min(t1.size(), q2.size()) + min(q1.size(), t2.size()) +
              min(f1, f2)
       << endl;
  for (int i = 0; i < res.size(); ++i) {
    cout << res[i].first + 1 << " " << res[i].second + 1 << endl;
  }
  for (int i = 0; i < min(t1.size(), q2.size()); i++) {
    cout << t1[i] + 1 << " " << q2[i] + 1 << endl;
  }
  for (int i = 0; i < min(t2.size(), q1.size()); i++) {
    cout << q1[i] + 1 << " " << t2[i] + 1 << endl;
  }
  int i1 = min(q1.size(), t2.size());
  int i2 = min(t1.size(), q2.size());
  while (i1 != q1.size() && i2 != q2.size()) {
    cout << q1[i1] + 1 << " " << q2[i2] + 1 << endl;
    i1++;
    i2++;
  }
  return 0;
}
