#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  string s, t;
  cin >> s >> t;
  vector<int> a[30], b[30];
  for (int i = 0; i < n; ++i) {
    if (s[i] == '?')
      a[28].push_back(i);
    else
      a[s[i] - 'a'].push_back(i);
    if (t[i] == '?')
      b[28].push_back(i);
    else
      b[t[i] - 'a'].push_back(i);
  }
  vector<bool> us1(n), us2(n);
  vector<pair<int, int> > ans;
  for (int i = 0; i < 26; ++i) {
    for (int j = 0; j < min(a[i].size(), b[i].size()); ++j) {
      ans.push_back({a[i][j], b[i][j]});
      us1[a[i][j]] = true;
      us2[b[i][j]] = true;
    }
  }
  int k = 0;
  for (int i = 0; i < 26; ++i) {
    for (int j = 0; j < a[i].size() && k < b[28].size(); ++j) {
      if (us1[a[i][j]] == false) {
        ans.push_back({a[i][j], b[28][k]});
        us2[b[28][k]] = true;
        ++k;
      }
    }
  }
  k = 0;
  for (int i = 0; i < 26; ++i) {
    for (int j = 0; j < b[i].size() && k < a[28].size(); ++j) {
      if (us2[b[i][j]] == false) {
        ans.push_back({a[28][k], b[i][j]});
        us1[a[28][k]] = true;
        ++k;
      }
    }
  }
  int t1 = 0, t2 = 0;
  while (t1 < a[28].size() && t2 < b[28].size()) {
    if (us1[a[28][t1]] == false && us2[b[28][t2]] == false) {
      ans.push_back({a[28][t1], b[28][t2]});
      ++t1, ++t2;
      continue;
    }
    if (us1[a[28][t1]]) ++t1;
    if (us2[b[28][t2]]) ++t2;
  }
  cout << ans.size() << '\n';
  for (auto i : ans) cout << i.first + 1 << ' ' << i.second + 1 << '\n';
}
