#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
const long long INF = 0x3f3f3f3f;
const double eps = 1e-9;
struct P {
  long double x, y;
  P() : x(0), y(0) {}
  P(long double _x, long double _y) : x(_x), y(_y) {}
  P operator+(P& p) { return P(x + p.x, y + p.y); }
  P operator-(P& p) { return P(x - p.x, y - p.y); }
  P operator*(long double d) { return P(x * d, y * d); }
  P operator/(long double d) { return P(x / d, y / d); }
  long double abs() { return sqrtl(x * x + y * y); }
  long double dot(P p) { return x * p.x + y * p.y; }
  long double det(P p) { return x * p.y - y * p.x; }
};
P p[maxn];
long double tg[maxn], d[maxn];
int main() {
  ios::sync_with_stdio(false);
  cout.setf(ios::fixed);
  int n, q;
  cin >> n >> q;
  for (int i = 1; i <= n; i++) {
    cin >> p[i].x >> p[i].y;
  }
  P g;
  long double fzx = 0, fzy = 0, fm = 0;
  for (int i = 2; i <= n - 1; i++) {
    fzx += (p[1].x + p[i].x + p[i + 1].x) *
           ((p[i].x - p[1].x) * (p[i + 1].y - p[1].y) -
            (p[i + 1].x - p[1].x) * (p[i].y - p[1].y));
    fzy += (p[1].y + p[i].y + p[i + 1].y) *
           ((p[i].x - p[1].x) * (p[i + 1].y - p[1].y) -
            (p[i + 1].x - p[1].x) * (p[i].y - p[1].y));
  }
  for (int i = 2; i <= n - 1; i++) {
    fm += 3.0 * ((p[i].x - p[1].x) * (p[i + 1].y - p[1].y) -
                 (p[i + 1].x - p[1].x) * (p[i].y - p[1].y));
  }
  g.x = fzx / fm;
  g.y = fzy / fm;
  for (int i = 1; i <= n; i++) {
    P l(p[i] - g);
    tg[i] = atan2l(l.y, l.x);
    if (tg[i] < 0) tg[i] += 2 * acosl(-1);
    d[i] = l.abs();
  }
  int s1 = 1, s2 = 2;
  int flag = 0;
  for (int i = 1; i <= q; i++) {
    int op;
    cin >> op;
    if (op == 1) {
      int f, t;
      cin >> f >> t;
      if (f == s1) swap(s1, s2);
      s2 = t;
      flag = 1;
      g.x = p[s1].x;
      g.y = p[s1].y - d[s1];
      long double _tg = tg[s1] - tg[s2];
      p[s2].x = g.x + d[s2] * sinl(_tg);
      p[s2].y = g.y + d[s2] * cosl(_tg);
    } else {
      int v;
      cin >> v;
      if (!flag) {
        cout << fixed << setprecision(6) << p[v].x << " " << p[v].y << endl;
      } else {
        long double _tg = tg[s1] - tg[v];
        P ans;
        ans.x = g.x + d[v] * sinl(_tg);
        ans.y = g.y + d[v] * cosl(_tg);
        cout << fixed << setprecision(6) << ans.x << " " << ans.y << endl;
      }
    }
  }
}
