#include <bits/stdc++.h>
using namespace std;
long long n;
string a, b;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long ttttt = 1;
  while (ttttt--) {
    cin >> n >> a >> b;
    vector<long long> x, y;
    vector<vector<long long>> v(26), w(26);
    vector<pair<long long, long long>> ans;
    for (long long i = 0; i < n; i++) {
      if (a[i] == '?')
        x.push_back(i + 1);
      else
        v[a[i] - 'a'].push_back(i + 1);
    }
    for (long long i = 0; i < n; i++) {
      if (b[i] == '?')
        y.push_back(i + 1);
      else
        w[b[i] - 'a'].push_back(i + 1);
    }
    for (long long i = 0; i < 26; i++) {
      vector<long long> t1 = v[i], t2 = w[i];
      while (((long long)t1.size()) > 0 && ((long long)t2.size()) > 0) {
        ans.push_back(
            {t1[((long long)t1.size()) - 1], t2[((long long)t2.size()) - 1]});
        t1.pop_back();
        t2.pop_back();
      }
      v[i] = t1;
      w[i] = t2;
    }
    for (long long i = 0; i < 26; i++) {
      vector<long long> t = w[i];
      while (((long long)x.size()) > 0 && ((long long)t.size()) > 0) {
        ans.push_back(
            {x[((long long)x.size()) - 1], t[((long long)t.size()) - 1]});
        x.pop_back();
        t.pop_back();
      }
    }
    for (long long i = 0; i < 26; i++) {
      vector<long long> t = v[i];
      while (((long long)y.size()) > 0 && ((long long)t.size()) > 0) {
        ans.push_back(
            {t[((long long)t.size()) - 1], y[((long long)y.size()) - 1]});
        y.pop_back();
        t.pop_back();
      }
    }
    while (((long long)x.size()) > 0 && ((long long)y.size()) > 0) {
      ans.push_back(
          {x[((long long)x.size()) - 1], y[((long long)y.size()) - 1]});
      x.pop_back();
      y.pop_back();
    }
    cout << ((long long)ans.size());
    cout << '\n';
    for (auto X : ans) cout << X.first << ' ' << X.second << '\n';
    return 0;
  }
  return 0;
}
