#include <bits/stdc++.h>
using namespace std;
char s1[1000007], s2[1000007];
vector<int> v1, v2;
vector<int> vv[37];
vector<pair<int, int> > vp;
int vis[1000007];
int main() {
  int n;
  scanf("%d", &n);
  scanf("%s%s", s1 + 1, s2 + 1);
  for (int i = 1; i <= n; i++)
    if (s1[i] >= 'a' && s1[i] <= 'z')
      vv[s1[i] - 'a'].push_back(i);
    else
      v1.push_back(i);
  for (int i = 1; i <= n; i++) {
    if (s2[i] >= 'a' && s2[i] <= 'z') {
      if (vv[s2[i] - 'a'].empty() == 0) {
        vp.push_back({vv[s2[i] - 'a'].back(), i});
        vv[s2[i] - 'a'].pop_back();
      } else if (v1.empty() == 0) {
        vp.push_back({v1.back(), i});
        v1.pop_back();
      }
    } else
      v2.push_back(i);
  }
  if (vp.size() == n || v2.empty()) {
    printf("%d\n", vp.size());
    for (auto& it : vp) printf("%d %d\n", it.first, it.second);
  } else {
    for (int i = 0; i < 26 && !v2.empty(); i++) {
      while (vv[i].empty() == 0 && v2.empty() == 0) {
        vp.push_back({vv[i].back(), v2.back()});
        vv[i].pop_back();
        v2.pop_back();
      }
    }
    while (v1.empty() == 0 && v2.empty() == 0) {
      vp.push_back({v1.back(), v2.back()});
      v1.pop_back();
      v2.pop_back();
    }
    printf("%d\n", vp.size());
    for (auto& it : vp) printf("%d %d\n", it.first, it.second);
  }
  return 0;
}
