#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const long long llinf = 0x3f3f3f3f3f3f3f3f;
template <typename INint>
inline void IN(INint &x) {
  x = 0;
  int f = 1;
  char c;
  cin.get(c);
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    cin.get(c);
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    cin.get(c);
  }
  x *= f;
}
template <typename INint>
inline void OUT(INint x) {
  if (x > 9) OUT(x / 10);
  cout.put(x % 10 + '0');
}
const int maxn = int(1);
map<char, vector<int>> ma[3];
int n;
vector<int> A, B;
void deal(vector<int> &L, vector<int> &R) {
  int a = *(L.end() - 1), b = *(R.end() - 1);
  L.pop_back();
  R.pop_back();
  A.push_back(a);
  B.push_back(b);
}
int main() {
  int T(1), times(0);
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  while (++times, T--) {
    cin >> n;
    for (int i = 1; i <= int(2); i++) {
      string s;
      cin >> s;
      for (int j = 1; j <= int(n); j++) {
        ma[i][s[j - 1]].push_back(j);
      }
    }
    int sum(0);
    for (char c = 'a'; c <= 'z'; c++) {
      int de = min(ma[1][c].size(), ma[2][c].size());
      if (c == 'd') c = c;
      for (int i = 1; i <= int(de); i++) {
        int a = *(ma[1][c].end() - 1), b = *(ma[2][c].end() - 1);
        ma[1][c].pop_back();
        ma[2][c].pop_back();
        A.push_back(a);
        B.push_back(b);
      }
    }
    vector<int> RA, RB;
    for (char c = 'a'; c <= 'z'; c++) {
      for (auto x : ma[1][c]) RA.push_back(x);
      for (auto x : ma[2][c]) RB.push_back(x);
    }
    int mm = min(ma[1]['?'].size(), RB.size());
    for (int i = 0; i < int(mm); i++) {
      deal(ma[1]['?'], RB);
    }
    mm = min(RA.size(), ma[2]['?'].size());
    for (int i = 0; i < int(mm); i++) {
      deal(RA, ma[2]['?']);
    }
    mm = min(ma[1]['?'].size(), ma[2]['?'].size());
    for (int i = 1; i <= int(mm); i++) {
      deal(ma[1]['?'], ma[2]['?']);
    }
    cout << A.size() << endl;
    for (int i = 0; i < int(A.size()); i++) {
      cout << A[i] << ' ' << B[i] << endl;
    }
  }
  return 0;
}
