#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
const int Mod = 1000000007;
const int INF = 0x3f3f3f3f;
const long long LL_INF = 0x3f3f3f3f3f3f3f3f;
const double e = exp(1);
const double PI = acos(-1);
const double ERR = 1e-10;
int sum[2][27];
char str1[maxn], str2[maxn];
vector<int> tt[2][27];
vector<pair<int, int> > ansv;
int main() {
  int n;
  scanf("%d", &n);
  scanf("%s", str1);
  scanf("%s", str2);
  for (int i = 0; i < n; i++) {
    if (str1[i] == '?') {
      tt[0][26].push_back(i + 1);
      sum[0][26]++;
    } else {
      tt[0][str1[i] - 'a'].push_back(i + 1);
      sum[0][str1[i] - 'a']++;
    }
  }
  for (int i = 0; i < n; i++) {
    if (str2[i] == '?') {
      tt[1][26].push_back(i + 1);
      sum[1][26]++;
    } else {
      tt[1][str2[i] - 'a'].push_back(i + 1);
      sum[1][str2[i] - 'a']++;
    }
  }
  int ans = 0;
  int cnt1 = 0, cnt2 = 0;
  for (int i = 0; i < 26; i++) {
    ans += min(sum[0][i], sum[1][i]);
    int tmp = min(sum[0][i], sum[1][i]);
    int ty = min(tt[0][i].size(), tt[1][i].size());
    for (int j = tt[0][i].size() - 1, k = tt[1][i].size() - 1; j >= 0 && k >= 0;
         j--, k--) {
      ansv.push_back(pair<int, int>(tt[0][i][j], tt[1][i][k]));
      tt[0][i].pop_back();
      tt[1][i].pop_back();
    }
  }
  for (int i = 0; i < 26; i++) {
    if (tt[0][i].size() > 0) {
      int tq = tt[0][i].size() - 1;
      while (sum[1][26] > 0 && tq >= 0) {
        sum[1][26]--;
        ans++;
        ansv.push_back(pair<int, int>(tt[0][i][tq], tt[1][26][sum[1][26]]));
        tq--;
      }
    }
    if (tt[1][i].size() > 0) {
      int tq = tt[1][i].size() - 1;
      while (sum[0][26] > 0 && tq >= 0) {
        sum[0][26]--;
        ans++;
        ansv.push_back(pair<int, int>(tt[0][26][sum[0][26]], tt[1][i][tq]));
        tq--;
      }
    }
  }
  while (sum[0][26] > 0 && sum[1][26] > 0) {
    sum[0][26]--;
    sum[1][26]--;
    ans++;
    ansv.push_back(
        pair<int, int>(tt[0][26][sum[0][26]], tt[1][26][sum[1][26]]));
  }
  printf("%d\n", ans);
  for (int i = 0; i < ans; i++)
    printf("%d %d\n", ansv[i].first, ansv[i].second);
  return 0;
}
