#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  ;
  long long n;
  cin >> n;
  string a, b;
  cin >> a >> b;
  vector<vector<long long> > aa(27), bb(27);
  vector<vector<bool> > ad(27), bd(27);
  for (long long i = 0; i < n; i++) {
    if (a[i] != '?') {
      aa[a[i] - 'a'].push_back(i);
      ad[a[i] - 'a'].push_back(false);
    } else {
      aa[26].push_back(i);
      ad[26].push_back(false);
    }
    if (b[i] != '?') {
      bb[b[i] - 'a'].push_back(i);
      bd[b[i] - 'a'].push_back(false);
    } else {
      bb[26].push_back(i);
      bd[26].push_back(false);
    }
  }
  long long j, l;
  vector<pair<long long, long long> > c;
  for (long long i = 0; i < 26; i++) {
    j = 0;
    while (j < aa[i].size() && j < bb[i].size()) {
      c.push_back(make_pair(aa[i][j], bb[i][j]));
      ad[i][j] = true;
      bd[i][j] = true;
      j++;
    }
  }
  long long k;
  l = 0;
  for (long long i = 0; i < 26; i++) {
    j = 0;
    while (j < bb[i].size() && l < aa[26].size()) {
      if (bd[i][j] == false) {
        c.push_back(make_pair(aa[26][l], bb[i][j]));
        bd[i][j] = true;
        ad[26][l] = true;
        l++;
      }
      j++;
    }
  }
  k = 0;
  for (long long i = 0; i < 26; i++) {
    j = 0;
    while (j < aa[i].size() && k < bb[26].size()) {
      if (ad[i][j] == false && bd[26][k] == false) {
        c.push_back(make_pair(aa[i][j], bb[26][k]));
        ad[i][j] = true;
        bd[26][k] = true;
        k++;
      }
      j++;
    }
  }
  j = 0;
  k = 0;
  while (j < aa[26].size() && k < bb[26].size()) {
    if (ad[26][j] == false && bd[26][k] == false) {
      c.push_back(make_pair(aa[26][j], bb[26][k]));
      j++;
      k++;
    }
    if (ad[26][j] == true) j++;
    if (bd[26][k] == true) k++;
  }
  cout << c.size();
  for (long long i = 0; i < c.size(); i++) {
    cout << endl << c[i].first + 1 << " " << c[i].second + 1;
  }
  return 0;
}
